2009-07-19 13 views
26

J'ai le cas de test suivant dans eclipse, en utilisant JUnit 4 qui refuse de passer. Qu'est-ce qui pourrait ne pas fonctionner?La balise JUnit attendue ne fonctionne pas comme prévu

@Test(expected = IllegalArgumentException.class) 
public void testIAE() { 
    throw new IllegalArgumentException(); 
} 

Ce testcase exact est arrivé en essayant de tester mon code avec l'étiquette prévu ne fonctionne pas. Je voulais voir si JUnit passerait le test le plus basique. Ce n'est pas le cas.

J'ai également testé avec des exceptions personnalisées comme prévu sans succès.

Screenshot: Screenshot http://www.freeimagehosting.net/uploads/6a995b0db7.png

+2

Celui-ci est vraiment bizarre, a fait quelques tests moi-même, et ce code fonctionne bien (le test est réussi) ... – Torandi

+0

J'ai ajouté une capture d'écran, juste pour montrer ... Je serais douteux aussi. –

Répondre

71

Le problème est que votre AnnounceThreadTest étend TestCase. Parce qu'il étend TestCase, le Runner JUnit le traite comme un test JUnit 3.8, et le test est en cours parce qu'il commence par le test de mot, en cachant le fait que l'annotation @Test n'est en fait pas utilisée du tout. Pour corriger cela, supprimez le "extends TestCase" de la définition de classe.

+0

Merci, ceci l'a fixé comme annoncé. –

+4

Après avoir supprimé le TestCase extends, j'ai dû ajouter l'importation supplémentaire pour m'assurer que j'avais les méthodes d'assertion statiques. import static org.junit.Assert. *; – burtlo

+6

Travail impressionnant à trouver la solution cachée comme un indice dans une capture d'écran –

3

juste couru dans ce IntelliJ JUnit 4.4:

@Test(expected = IllegalArgumentException.class) 
    public void testExpected() 
    { 
     throw new IllegalArgumentException(); 
    } 

Laissez-passer parfaitement. Recréez votre projet entier et réessayez.

Il y a quelque chose d'autre que vous faites mal. JUnit 4.4 fonctionne comme annoncé.