Ar trebui să folosesc aceleași variabile prin întreaga Unitate de Testare?

0

Problema

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?

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

Cel mai bun răspuns

2

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.

2021-11-23 13:38:26

Multumesc mult, orice exemplu de cod care arată utilizarea corectă?
rzwitserloot

Nu am înțeles diferența dintre @BeforeClass și @Before. Orice clarificare pls?
Amadán

toate metodele cu @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.
rzwitserloot

@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.
rzwitserloot

Eu folosesc JUnit5, atunci nu văd diferența între @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?
avandeursen

Nu goli lista. Se pare de asemenea, ar trebui să se joace cu acest lucru un pic, pentru că în mod evident un ASTFEL de răspuns nu este suficient pentru tine. Asta e un instinct bun! Doar.. face niste teste, se adaugă unele elemente la o listă inițializat doar o singură dată în @Beforeși pentru a imprima unele lucruri - fără a scoate nimic. Apoi pur și simplu să observ ce se întâmplă.

Da, ar putea fi jucat, dar cred că este o situație comună și trebuie să existe o abordare generală pentru asta. Deci, am nevoie doar să fie clarificate despre Unitate de Testare convenția pentru re-folosind aceleași variabile (de exemplu, doar definirea dată în @BeforeEach SAU @Înaintetoate, clar variabilele pe @AfterEach. Deci, ce este abordarea corectă pentru această situație?. Vreo idee?

Utilizarea @Before. Nu am nici o idee ce ar putea fi încă confuz la acest punct. Răspunsul vrăji!

În alte limbi

Această pagină este în alte limbi

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