Mal by som používať rovnaké premenné myslel Celok Testovanie?

0

Otázka

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?

java junit junit5 testing
2021-11-23 13:33:22
1

Najlepšiu odpoveď

2

Č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é.

2021-11-23 13:38:26

Díky moc, žiadne napríklad kód, ktorý ukázať správne použitie?
rzwitserloot

Nevedel som pochopiť rozdiel medzi @BeforeClass a @Before. Akékoľvek objasnenie pls?
Amadán

všetky metódy s @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 @Beforea tak testy sú nezávislé. Stačí si prečítať dokumenty pre tieto poznámky.
rzwitserloot

@BeforeClass (JUnit 5: @BeforeAll) spustí, akonáhle sa za celý test triedy, @Before (JUnit 5: @BeforeEach) beží pred každý test metódy.
rzwitserloot

Používam JUnit5, potom som vidieť rozdiel medzi @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?
avandeursen

Nie je jasné zoznamu. Tiež to znie, ako by ste mali hračky okolo s týmto trochu, pretože evidentne je TAK odpoveď nie je dostatočná pre vás. To je dobrý inštinkt! Stačí.. urobiť nejaké testy, pridať niektoré prvky do zoznamu inicializovaná iba raz v @Beforea tlačiť nejaké veci - bez odstránenia nič. Potom stačí sledovať, čo sa stane.

Áno, mohlo by to byť hraná, ale myslím, že to je naozaj bežné situácie a tam musí byť všeobecný prístup, že. Tak som len potrebné objasniť, o Jednotku Test dohovoru na opakované použitie rovnakých premenných (napr. len definovanie raz v @BeforeEach ALEBO @BeforeAll, jasné ukazovatele @AfterEach. Tak, aký je správny prístup na túto situáciu?. Akýkoľvek nápad?

Použitie @Before. Nemám potuchy, čo by mohlo ešte byť mätúce ste v tomto bode. Odpoveď kúzla to!

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................