Je suis la création de Tests Unitaires en Java et pour chaque méthode, j'ai créer les mêmes listes, variables, etc. D'autre part, bien sûr, j'ai pensé que je pouvais créer de toutes ces variables globales et de définir leurs valeurs dans l' setup()
méthode (en @Before
), mais je ne suis pas sûr si les valeurs peuvent être modifiées lors de l'exécution de tests en raison de multithreading, etc. Alors, quelle est la meilleure façon pour ce genre de situation?
Rien à craindre. JUnit va créer une nouvelle instance de votre classe de test, puis exécutez chaque @Before
méthode, et seulement ensuite, exécutez l' @Test
méthode, et il le fait de la chanson et de la danse de routine tout recommencer pour chaque @Test
méthode annotée dans cette classe. Vous êtes à l'aide de @Before
exactement ce qui était prévu: C'est pour stocker le code d'initialisation qui est requis pour tous les tests dans la classe de test.
JUnit est-il de cette façon parce que test "d'indépendance" est agréable d'avoir: des Tests, de préférence, d'échouer ou de passer indépendant de l'ordre dans lequel vous les exécuter.
Chaque si souvent le processus init est tellement cher que c'est pas la peine de payer le coût de l'exécution et recommencer pour chaque test. L'annotation @BeforeClass
existe spécialement pour cette fin. La javadoc de @BeforeClass
même les sorts que cela compromet test d'indépendance et doit donc être utilisé uniquement si le programme d'installation de travail que vous faites au sein d'une telle méthode est assez coûteuse (en termes de calcul ou autre) pour faire cette différence.
En d'autres termes:
Vos inquiétudes au sujet du test d'indépendance sont réels, mais ils s'appliquent à @BeforeClass
. @Before
ne souffre pas de ce problème; ce code est ré-exécutée pour chaque test.
NB: Vous pouvez mélanger tout cela par la fenêtre si vous avez static
choses qui se passent. N'ont pas statique des trucs dans le code de test, sauf si vous savez vraiment ce que vous faites. Je suppose que vous n'avez pas que dans ce cas - porter sur, vos tests sont indépendants.
@BeforeClass
et @Before
. Toute clarification pls? @Before
sont exécutées avant chaque test. Toutes les méthodes avec @BeforeClass
sont exécutées qu'une seule fois, avant tout essai. En général, vous définissez static
des trucs avec @BeforeClass
qui est ensuite ré-utilisé (donc, les tests ne sont plus indépendants). Vous définissez non-statique des trucs avec @Before
et donc les tests sont indépendants. Il suffit de lire la doc de ces annotations. @BeforeClass
(JUnit 5: @BeforeAll
) exécute une seule fois pour l'ensemble de la classe de test, @Before
(JUnit 5: @BeforeEach
) est exécutée avant chaque méthode de test. @BeforeEach
vs @BeforeAll
eh bien à partir de vos explications. Cependant, je ne suis pas sûr si je devrais ou ne pas effacer les listes qui sont utilisés par de multiples essais. J'ay besoin de le vider dans @AfterEach
. Une idée? @Before
et imprimer quelques trucs - sans rien enlever. Ensuite, il suffit d'observer ce qui se passe. @AfterEach
. Alors, qu'est-ce que l'approche appropriée pour cette situation?. Une idée? @Before
. Je n'ai aucune idée de ce que pourrait être encore en train de vous confondre à ce point. La réponse des sorts ça!