2010-03-22 3 views
4

J'ai deux classes que je suis en train de tester (appelons-les ClassA et ClassB). Chacun a sa propre classe de test JUnit (testClassA et testClassB respectivement). ClassA s'appuie sur ClassB pour son fonctionnement normal, donc je veux m'assurer que ClassB passe ses tests avant d'exécuter testClassA (sinon les résultats de testClassA seraient sans signification).Exécution de classes de test JUnit à partir d'une autre classe de test JUnit

Quelle est la meilleure façon de faire cela? Dans ce cas, il s'agit d'une affectation. Je dois donc la conserver dans les deux classes de test spécifiées si possible. Est-ce que/est-ce que je peux lancer une exception de testClassA si les tests de testClassB ne sont pas tous passés? Ceci nécessiterait que testClassB s'exécute de manière invisible et signale simplement son succès/échec à testClassA, plutôt qu'à l'interface graphique (via JUnit).

J'utilise Eclipse et JUnit 4.8.1

Mise à jour: Jusqu'à présent, le meilleur que je l'ai réussi est un fichier séparé avec une suite de test comme indiqué ci-dessous. Ce n'est pas tout à fait ce que je suis en train de faire, car il permet toujours aux tests ClassB d'être exécutés si ClassA échoue à certains tests.

import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 

@RunWith(Suite.class) 
@Suite.SuiteClasses({testClassA.class, testClassBCode.class}) 
public class testClassB { 
} 

Répondre

9

Vos tests unitaires ne doivent pas dépendre d'autres tests.

Une solution à votre problème serait de se moquer de ClassB dans vos tests de ClassA, afin de tester son comportement indépendamment des résultats des tests de ClassB. Je recommande que vous essayez mockito!

+0

Dans ce cas, comme c'est une mission, je ne peux pas compter sur mes professeurs ayant mockito - essentiellement ils vont juste copier mon paquet Java dans leur projet, exécuter leurs tests sur mes classes, et exécuter mes tests sur leurs classes. (pour référence future, évidemment, j'aimerais savoir la meilleure façon d'aborder de telles choses). Bien que ce ne soit peut-être pas idéal, pour le moment je cherche juste un moyen (s'il existe) de dire '// ne pas lancer ce test à moins que ClassB ait réussi ses tests' sans avoir à compter dessus le testeur voyant mon commentaire. –

+0

Je ne pense pas que vous pouvez le faire dans JUnit. Vous pouvez spécifier l'ordre de test en utilisant le module complémentaire OrderedSuite pour JUnit, TestNG ou d'autres frameworks de test. – mgv

0

Vous devriez essayer le framework testng qui permet ce genre de test de dépendance.

+2

Comme dans le commentaire précédent: ceci est pour une affectation et les tests JUnit sont une exigence. –