Já jsem vytváření Unit Testů v Javě a pro každou metodu, vytvořit stejné seznamy, proměnné, atd. Na druhou stranu, samozřejmě, že jsem myslel, že jsem mohl vytvořit všechny tyto proměnné jako globální, a nastavte jejich hodnoty v setup()
metoda (v @Before
), ale nejsem si jistý, jestli hodnoty, které mohou být změněny, když testy kvůli multithreading, atd. Takže, co je nejlepší způsob, jak pro tuto situaci?
Nic se bát. JUnit vytvoří novou instanci vaše testovací třídy, a pak spustit každý @Before
metoda, a teprve pak spustit @Test
metoda, a to, že píseň a taneček znovu pro každý @Test
komentovaný metoda v této třídě. Používáte @Before
přesně tak, jak bylo zamýšleno: To je pro uložení inicializační kód, který je vyžadován pro všechny testy v testovací třídě.
JUnit to tímto způsobem, protože test nezávislosti' je hezké mít: Testy, nejlépe, fail nebo pass nezávisle na objednávce, ve které budete spouštět je.
Každý tak často, proces init je tak drahé, že to nestojí za to, aby zaplatit "náklady" běží to znovu a znovu pro každý test. Anotace @BeforeClass
existuje speciálně pro ten účel. Na javadoc z @BeforeClass
dokonce vysvětluje, že to ohrožuje test nezávislosti, a proto by měly být používány, pouze pokud instalační práce v rámci této metody je dostatečně drahé (počítačově nebo jinak), aby to kompromis.
Jinými slovy:
Vaše starosti o test nezávislosti jsou skutečné, ale oni se vztahují na @BeforeClass
. @Before
netrpí tento problém, že kód je re-run pro každý test.
POZNÁMKA: můžete vyhodit vše z okna, pokud máte static
věci děje. Nemám statické věci v testovací kód, pokud opravdu víte, co děláte. Předpokládám, že nemáte, že v tom případě pokračuj, tvoje testy jsou nezávislé.
@BeforeClass
a @Before
. Žádné vysvětlení pls? @Before
jsou spouštěny před každý test. Všechny metody s @BeforeClass
jsou spuštěny pouze jednou, a to před každou zkouškou. Obecně platí, že můžete nastavit static
věci s @BeforeClass
což je pak znovu použit (tak, testy jsou již nezávislé). Můžete nastavit non-statické věci s @Before
a tak testy jsou nezávislé. Stačí si přečíst dokumenty pro tyto popisy. @BeforeClass
(JUnit 5: @BeforeAll
) se spustí jednou pro celé testovací třídy, @Before
(JUnit 5: @BeforeEach
) se spouští před každým jeden zkušební metody. @BeforeEach
vs @BeforeAll
no, z vašeho vysvětlení. Nicméně, nejsem si jistý, jestli bych měl, nebo není jasné, seznamy, které jsou používány více test. Já ay potřebují, aby jim jasné, ve @AfterEach
. Nějaký nápad? @Before
a tisknout nějaké věci - bez odstranění čehokoliv. Pak stačí pozorovat, co se stane. @AfterEach
. Takže, co je správný přístup k této situaci?. Nějaký nápad? @Before
. Nemám ponětí, co by mohlo ještě být matoucí v tomto bodě. Odpověď kouzla!