J'ai deux classes que je teste (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, je veux donc m'assurer que ClassB réussit ses tests avant d'exécuter testClassA (sinon les résultats de testClassA n'auraient aucun sens).

Quelle est la meilleure façon de procéder? Dans ce cas, c'est pour un devoir, je dois donc le garder dans les deux classes de test spécifiées si possible.

Puis-je/devrais-je lever une exception de testClassA si les tests de testClassB ne sont pas tous réussis ? Cela 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 j'ai géré est un fichier séparé avec une suite de tests, comme indiqué ci-dessous. Ce n'est toujours pas tout à fait ce que je recherche car cela permet toujours d'exécuter des tests ClassB 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 {
}
4
David Mason 22 mars 2010 à 06:48

2 réponses

Meilleure réponse

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

Une solution à votre problème serait de vous moquer de ClassB dans les tests de votre ClassA, afin de tester son comportement indépendamment des résultats des tests de ClassB.

Je vous recommande d'essayer mockito !

9
mgv 22 mars 2010 à 06:52
Dans ce cas, comme il s'agit d'un devoir, je ne peux pas compter sur le mockito de mes professeurs - essentiellement, ils vont simplement copier mon package Java dans leur projet, exécuter leurs tests sur mes cours et exécuter mes tests sur leurs cours. (pour référence future, évidemment, j'aimerais connaître la meilleure façon d'aborder de telles choses). Bien que ce ne soit peut-être pas l'idéal, pour le moment, je cherche simplement un moyen (s'il en existe un) de dire //don't run this test unless ClassB has passed its tests sans avoir à compter sur le testeur pour voir mon commentaire.
 – 
David Mason
22 mars 2010 à 07:03
Je ne pense pas que vous puissiez 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
22 mars 2010 à 07:22

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

0
fastcodejava 22 mars 2010 à 07:17
2
Comme dans le commentaire précédent : il s'agit d'un devoir et les tests JUnit sont une exigence.
 – 
David Mason
22 mars 2010 à 07:31