Instanciation d'objet JUnit TestCase
-
05-07-2019 - |
Question
Une nouvelle instance (ou différente) de l'objet TestCase
est-elle utilisée pour exécuter chaque méthode de test dans un scénario de test JUnit? Ou une instance est réutilisée pour tous les tests?
public class MyTest extends TestCase {
public void testSomething() { ... }
public void testSomethingElse() { ... }
}
Lors de l'exécution de ce test, combien d'instances de la classe MyTest
sont créées?
Si possible, fournissez un lien vers un document ou un code source sur lequel je peux vérifier le comportement.
La solution
Je n'ai pas trouvé de réponse claire à votre question dans la documentation JUnit, mais l'intention, comme l'a écrit anjanb, est que chaque test soit indépendant des autres, de sorte qu'une nouvelle instance TestCase puisse être créée pour chaque test. courir.
Si vous avez une configuration de test coûteuse (& em; appareils ") que vous souhaitez partager avec tous les scénarios de test d'une classe de test, vous pouvez utiliser la @BeforeClass annotation sur une méthode statique pour atteindre ce résultat: http: //junit.sourceforge .net / javadoc_40 / org / junit / BeforeClass.html . Notez cependant qu'une nouvelle instance peut toujours être créée pour chaque test, mais cela n'affectera pas les données statiques que votre méthode @BeforeTest a initialisées.
Autres conseils
Oui, une instance distincte est créée.
Lors de l'exécution de ce test, 2 instances de MyTest sont créées.
Si vous souhaitez un comportement différent, une option consiste à utiliser un outil similaire appelé TestNG ( http://testng.org / doc / ).
Il y a une instance pour chaque série de tests. Essayez
public class MyTest extends TestCase {
public MyTest() { System.out.println("MyTest Constructor");
public void setUp() { System.out.println("MyTest setUp");
public void tearDown() { System.out.println("MyTest tearDown");
public void testSomething() { System.out.println("MyTest testSomething");
public void testSomethingElse() { System.out.println("MyTest testSomethingElse");
}
Le code source (y compris celui des versions plus récentes - Junit 3 et votre exemple, par exemple) se trouve sur http: // www. junit.org
Si vous vous posez cette question parce que vous êtes préoccupé par l'initialisation et la réinitialisation des données dans votre constructeur, sachez que la méthode recommandée pour initialiser les données de votre scénario de test consiste à définir exclusivement les commandes setUp () et tearDown ().
Oui, définitivement. J'ai constaté que les données stockées dans les variables d'instance étaient inaccessibles entre les tests en raison de cette conception.