JUnit @Test annotation 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 .

est-ce que je dois configurer autre chose pour faire tourner ça?


je lance le test avec

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

}

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

et quand j'enlève le préfixe test , j'obtiens toujours une erreur.

je dois dire que je fais ces tests avec Eclipse, mais il est configuré pour utiliser le JUnit 4 Runner.

30
demandé sur Community 2011-04-05 14:03:27

8 réponses

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

maintenant, ma classe test est une classe à part.

46
répondu 2011-04-07 06:31:28
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase 

j'ai aussi eu des problèmes avec @Test(expected = ...) annotation quand j'ai étendu la classe TestCase dans mon test de base. Using @RunWith (JUnit4.classe) a aidé instantanément (pas très élégant solution, je l'avoue)

8
répondu pmar_x86 2014-12-09 18:53:59

j'ai essayé celui-ci, et fonctionnent 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);
    }
}

s'assure également que junit4 est ajouté en tant que dependancy, @ (annotations) sont de nouvelles fonctionnalités dans junit 4.

7
répondu Piccaza 2018-03-15 04:30:58

j'ai fait face à la même question, la solution est simple" N'étend pas la classe de cas d'essai "

5
répondu guesst 2014-01-02 11:01:28

Non, Ce test de JUnit devrait fonctionner comme il est - 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 s'amalgament dans une autre exception de type différent?

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

comme @duffymo l'a suggéré, il est facile de vérifier quelle (s'il y en a) exception le test lance vraiment.

3
répondu Péter Török 2011-04-05 10:10:38

ça me semble correct.

Vérifiez vos suppositions. Êtes-vous sûr il lance l'exception? Si ce que vous dites est vrai, supprimer l'attendu de l'annotation devrait le faire échouer.

Je parcourrais 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
répondu duffymo 2011-04-05 10:09:56

vient de tester sous JUnit4: cela fonctionne, le test se termine avec succès. Regardez si c'est un Illegal Selector Exception ou un truc du genre.

1
répondu Alex Abdugafarov 2011-04-05 10:12:13

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

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;

et ajouté:

import org.junit.Test;

et ça a bien marché pour moi.

0
répondu dhakre 2018-01-14 12:45:27