web-dev-qa-db-fra.com

L'annotation JUnit @Test attendue ne fonctionne pas

J'ai le test suivant:

@Test(expected = IllegalStateException.class)
public void testKey() {
    int key = 1;
    this.Finder(key);
}

Mais JUnit rapporte que le test échoue, bien qu'il lance - comme prévu - un IllegalStateException.

Dois-je configurer autre chose pour que cela fonctionne?


Je lance le test maintenant avec

@RunWith(Suite.class)
@SuiteClasses(Test.class)
public class TestSuite {

}

comme dans cette question , mais je n'obtiens toujours pas le résultat souhaité.

Et quand je supprime le préfixe test, je reçois toujours une erreur.

Je dois dire que j'exécute ces tests avec Eclipse, mais il est configuré pour utiliser le JUnit 4 Runner.

33
user321068

Le problème était que la classe dans laquelle le test était imbriqué était une extension de TestCase. Comme il s'agit du style JUnit 3, l'annotation n'a pas fonctionné.

Maintenant, ma classe de test est une classe à part entière.

48
user321068
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase 

J'ai également eu des problèmes avec l'annotation @Test (attendu = ...) lorsque j'ai étendu la classe TestCase dans mon test de base. L'utilisation de @RunWith (JUnit4.class) a aidé instantanément (pas une solution extrêmement élégante, je l'admets)

9
pmar_x86

j'ai essayé celui-ci et fonctionne parfaitement comme prévu.

public class SampleClassTest {
    @Test(expected = ArithmeticException.class )
    public void lost(){
        this.lost(0);
    }
    private void lost(int i) throws ArithmeticException {
        System.out.println(3/i);
    }
}

assurez-vous également que junit4 est ajouté en tant que dépendance, @ (annotations) est une nouvelle fonctionnalité de junit 4.

7
Dipak

J'ai rencontré le même problème, la solution est simple "Ne pas étendre la classe TestCase"

6
guesst

Non, ce test JUnit devrait fonctionner tel quel - il n'y a rien de plus nécessaire de ce côté.

Qu'est-ce qui vous assure que le test lance un IllegalStateException? Est-il possible qu'il soit enveloppé dans une autre exception de type différent?

Veuillez poster le message d'échec exact de JUnit.

Comme l'a suggéré @duffymo, il est facile de vérifier quelle (le cas échéant) exception le test lance vraiment.

3
Péter Török

Cela me semble correct.

Vérifiez vos hypothèses. Êtes-vous sûr cela lève l'exception? Si ce que vous dites est vrai, la suppression de l'attendu de l'annotation devrait l'échouer.

Je serais en train de parcourir le code avec un débogueur pour voir ce qui se passe. Je suppose que vous avez un IDE qui le fera, comme IntelliJ.

2
duffymo

J'ai eu le même problème que je viens de changer mes déclarations d'importations. J'ai enlevé :

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;

et ajouté :

import org.junit.Test;

Et cela a bien fonctionné pour moi.

2
dhakre

Je viens de le tester sous JUnit4: ce travail fonctionne, le test se termine avec succès. Regardez s'il s'agit d'un IllegalSelectorException ou autre.

1
Alex Abdugafarov