Ja som vytváranie Testov Jednotiek v jazyku Java a za každý spôsob, aby som vytvorte rovnaké zoznamy, premenné, atď. Na druhej strane, samozrejme, že som si myslel, že som mohol vytvoriť všetky tieto premenné ako globálny a nastaviť ich hodnoty v setup()
metóda (v @Before
), ale nie som si istý, či hodnota môže byť zmenená, keď beží testy kvôli multithreading, atď. Takže, čo je najlepší spôsob, ako túto situáciu?
Čoho obávať. JUnit vytvorí novú inštanciu váš test triedy, a potom spustiť každý @Before
metódy, a až potom spustiť @Test
metódy, a to, že pieseň a tanec rutinné znovu pre každý @Test
anotované metóda v tejto triede. Používate @Before
presne tak, ako to bolo určené: je To pre ukladanie inicializačný kód, ktorý je potrebný pre všetky testy v tom, že test triedy.
JUnit to týmto spôsobom, pretože "test nezávislosti" je pekné mať: Testy, najlepšie, zlyhajú alebo sa prejsť nezávislé od objednania, v ktorej budete vykonávať ich.
Každý tak často, init proces je tak drahé, že to nestojí za to platiť "náklady" beží to znovu a znovu, za každý test. V anotácii @BeforeClass
existuje špeciálne pre ktoré účel. V javadoc z @BeforeClass
to aj vysvetľuje, že tento kompromisy test nezávislosti, a preto by mala byť používaná len ak je nastavenie prácu, ktorú robia v rámci táto metóda je dostatočne drahé (computationally alebo inak), aby to kompromis.
Inými slovami:
Starosti o test nezávislosti sú skutočné, ale ktoré sa vzťahujú na @BeforeClass
. @Before
nemá trpia týmto problémom, že kód je znova spustiť za každý test.
POZNÁMKA: môžete hodiť to všetko z okna, ak máte static
veci sa deje. Nemusíte mať statické veci v testovacie kódu, ak naozaj viete čo robíte. Predpokladám, že nemáte že v tomto prípade - vykonávať, vaše testy sú nezávislé.
@BeforeClass
a @Before
. Akékoľvek objasnenie pls? @Before
sú spúšťané pred každý test. Všetky metódy s @BeforeClass
sú spustiť iba raz, a to pred vykonaním akejkoľvek skúšky. Vo všeobecnosti, môžete nastaviť static
veci, s @BeforeClass
čo je potom opätovne použité (tak, testy sú už nezávislý). Môžete nastaviť non-statické veci s @Before
a tak testy sú nezávislé. Stačí si prečítať dokumenty pre tieto poznámky. @BeforeClass
(JUnit 5: @BeforeAll
) spustí, akonáhle sa za celý test triedy, @Before
(JUnit 5: @BeforeEach
) beží pred každý test metódy. @BeforeEach
vs @BeforeAll
aj z vášho vysvetlenia. Avšak, nie som si istý, či by som mal alebo nie je jasné, zoznamy, ktoré sa používajú viaceré test. Som ay potrebné na ich odstránenie v @AfterEach
. Akýkoľvek nápad? @Before
a tlačiť nejaké veci - bez odstránenia nič. Potom stačí sledovať, čo sa stane. @AfterEach
. Tak, aký je správny prístup na túto situáciu?. Akýkoľvek nápad? @Before
. Nemám potuchy, čo by mohlo ešte byť mätúce ste v tomto bode. Odpoveď kúzla to!