Eu sunt crearea de Teste Unitare în Java și pentru fiecare metodă, am crea aceleași liste, variabile, etc. Pe de altă parte, desigur, m-am gândit că aș putea crea toate aceste variabile globale și a stabilit valorile lor în setup()
metoda (în @Before
), dar nu sunt sigur dacă valorile pot fi modificate atunci când rulează teste din cauza multithreading, etc. Deci, ce este cel mai bun mod de această situație?
Nimic să vă faceți griji despre. JUnit va crea o nouă instanță de clasa de test, și apoi executați fiecare @Before
metoda, și numai apoi executați @Test
metoda, și face asta, cântec și dans peste tot din nou pentru fiecare @Test
adnotat metoda din clasa respectivă. Utilizați @Before
exact așa cum a fost destinat: e pentru stocarea de cod de inițializare care este necesar pentru toate testele în care clasa de test.
JUnit face în acest fel, pentru că testul de independență este frumos de a avea: Teste, de preferință, nu reușesc sau trece independent de ordinea în care le executa.
Fiecare atât de des procesul init este atât de scump încât nu merită să plătească "costul" de rulare de peste si peste din nou pentru fiecare test. Adnotare @BeforeClass
există special pentru acel scop. Javadoc de @BeforeClass
chiar precizează că acest lucru compromite testul de independență și, prin urmare, ar trebui să fie utilizate numai dacă la configurare munca pe care o faci într-un astfel de metoda este suficient de scumpe (de calcul sau în alt mod) pentru a face acest compromis.
Cu alte cuvinte:
Grijile despre testul de independență sunt reale, dar ele se aplică @BeforeClass
. @Before
nu suferă de această problemă; acest cod este re-rula pentru fiecare test.
NB: puteți arunca toate astea pe fereastră dacă aveți static
lucruri se întâmplă. Nu trebuie static lucrurile în codul de test dacă nu știu cu adevărat ceea ce faci. Presupun că nu ai acel caz în care - transporta pe, testele sunt independente.
@BeforeClass
și @Before
. Orice clarificare pls? @Before
sunt rulate înainte de fiecare test. Toate metodele cu @BeforeClass
sunt rulate doar o singură dată, înainte de orice test. În general, setați static
chestia cu @BeforeClass
care este apoi re-utilizate (deci, testele nu mai sunt independente). Setați non-static lucruri cu @Before
și astfel de teste sunt independente. Citește docs pentru aceste adnotări. @BeforeClass
(JUnit 5: @BeforeAll
) se execută o singură dată pentru întreaga clasa de test, @Before
(JUnit 5: @BeforeEach
) se execută înainte de fiecare metodă de testare. @BeforeEach
vs @BeforeAll
ei bine din explicatiile tale. Cu toate acestea, nu sunt sigur dacă ar trebui sau nu clar listele care sunt utilizate de mai multe teste. Am ay nevoie pentru a le clar în @AfterEach
. Vreo idee? @Before
și pentru a imprima unele lucruri - fără a scoate nimic. Apoi pur și simplu să observ ce se întâmplă. @AfterEach
. Deci, ce este abordarea corectă pentru această situație?. Vreo idee? @Before
. Nu am nici o idee ce ar putea fi încă confuz la acest punct. Răspunsul vrăji!