2010-10-05 15 views
2

J'utilise l'annotation @BeforeClass pour m'assurer qu'un ensemble d'activités est effectué une seule fois dans un ensemble de 5-6 tests. Il y a une hiérarchie de 3 fichiers Java.@BeforeClass exécute toujours la méthode à chaque fois qu'un test est exécuté

File1 étend TestCase

File2 étend Fichier 1 (ce qui est l'endroit où je mettre l'annotation beforeclass à la méthode de configuration)

Fichier3 étend File2 (dossier 3 présente les essais .. au nombre de 5, mais je veux que la configuration dans le fichier 2 soit exécutée une seule fois)

À l'heure actuelle, la méthode setUp du fichier 2 est appelée avant chaque test dans File3. même après avoir mis l'annotation @BeforeClass. Que puis-je faire pour que cette configuration s'exécute une seule fois pour tous les tests du fichier 3

Répondre

2

Puisque vous étendez la classe TestCase, la méthode setUp est appelée avant le début de chaque test. Pour junit 4 à partir de, vous n'avez pas besoin d'étendre la classe TestCase. Essayez simplement de l'enlever et ça devrait marcher. Vous devrez également ajouter l'annotation @Test sur la méthode de test

+0

merci pour la réponse. Mais qu'adviendra-t-il des méthodes setUp et tearDown? ceux qui étaient censés fonctionner chaque fois qu'un test est exécuté. Je suppose que l'annotation @beforeclass ne fera pas pour les méthodes setUp normales. Quelle annotation devrais-je utiliser ici, le cas échéant? – encryptor

+0

Vous pouvez utiliser @Before et @After des annotations respectivement pour setUp et tearDown. –

+0

Maintenant, est-il nécessaire de rendre statique la méthode @beforeclass? Si cela est nécessaire, tout ce qui est à l'intérieur devra être rendu statique. est-il un moyen d'éviter de rendre le mwthod statique et d'aller de l'avant avec @beforeclass? – encryptor

2

Je suppose que vous utilisez un JUnit 3 TestRunner qui ignore les annotations et n'utilise que des conventions de dénomination (où setUp() est exécuté de manière classique avant chaque test). Essayez d'avoir une méthode avec l'annotation @Test mais ne commencez pas par "test" - si elle n'est pas exécutée, vous utilisez JUnit 3 TestRunner. Pour résoudre ce problème, utilisez JUnit 4 TestRunner pour lancer la suite de tests.