2016-01-06 1 views
1

J'ai trouvé une chose étrange et je suis curieux de savoir pourquoi cela arrive. J'utilise maven surefire plugin (2.12.4) avec Junit 4.11. Quand je voulais utiliser l'annotation @Category afin de désactiver certains tests. la chose étrange que cela fonctionne correctement seulement avec des tests qui ne s'étendent pas TestCase. Pour le test qui ne s'étend pas TestCase je pouvais mettre l'annotation seulement sur la méthode de test à exécuter/désactiver, mais avec d'autres cela désactive tous les tests dans la classe. Exemple: ligne de commande: mvn test -Dgroups=!testgroups.DisabledTests run seul test B pour le premier extrait:JUnit Catégorie ne fonctionne pas avec TestCase?

import static org.junit.Assert.*; 
public class DataTest { 
    @Test 
    public void testA(){...} 

    @Test @Category(testgroups.DisabledTests.class) 
    public void testB(){...} 
} 

pour le second cas, la classe extension TestCase, il fonctionnera pas de tests.

public class DataTest extends TestCase { 
    @Test 
    public void testA(){...} 

    @Test @Category(testgroups.DisabledTests.class) 
    public void testB(){...} 
} 

Pourquoi cela se produit-il?

+0

Le problème est que la deuxième classe est une extension de TestCase. Comme il s'agit du style JUnit 3, l'annotation @Category n'a pas fonctionné. Annoter la classe avec @RunWith (JUnit4.class) devrait vous donner le même résultat dans les deux cas –

+0

Merci. J'ai déjà écrit dans la question que le problème est dans 'TestCase', mais je ne savais pas pourquoi. Voulez-vous dire que 'TestCase' est obsolète pour JUnit 4? –

+1

JUnit 4 trouve le test en recherchant l'annotation '@ Test'. Vous pouvez supprimer 'extends TestCase' de votre classe de test. De plus, le nom de la méthode de test ne doit plus commencer par 'test'. Vous êtes libre de choisir le nom de la méthode que vous voulez. –

Répondre

0

La solution a été donnée dans un commentaire par deborah-digges:

Le problème est que la deuxième classe est une extension de TestCase. Comme il s'agit du style JUnit 3, l'annotation @Category n'a pas fonctionné. Annoter la classe avec @RunWith (JUnit4.class) devrait vous donner le même résultat dans les deux cas

et un autre par Stefan Birkner:

JUnit 4 trouvailles test en cherchant l'annotation @Test. Vous pouvez supprimer le extends TestCase de votre classe de test. En outre, le nom de la méthode de test ne doit plus commencer par test. Vous êtes libre de choisir le nom de la méthode que vous voulez.