Mockito oferă două metode care pot fi utilizate pentru a gestiona starea de machete în timpul testării: `Reset ()` și `ClearInvocations ()`. În timp ce ambele metode sunt utilizate pentru a gestiona starea batjocoritoare, ele servesc scopuri diferite și au efecte distincte asupra batjocorelor.
Mockito's `Reset ()` Metoda
Metoda `reset ()` în Mockito este folosită pentru a reseta în întregime un obiect Mock. Acest lucru înseamnă că nu numai că șterge numărul de invocare, dar elimină și orice încăpățânare care a fost setată pe batjocură. Acest lucru poate fi problematic, deoarece necesită să re-stupiți batjocura după resetarea ei dacă doriți să mențineți un comportament specific pentru testele dvs. Utilizarea `resetare ()` este în general descurajată, deoarece poate duce la teste complexe și mai puțin concentrate. Este recomandat să evitați utilizarea `reset ()` dacă nu este absolut necesar, deoarece poate ascunde intenția testelor dvs. și le poate face mai greu de menținut [1] [5] [7].
Metoda „ClearInvocations” a lui Mockito ()
Metoda `ClearInvocations ()`, introdusă în Mockito 2.1, vă permite să ștergeți numărul de invocare a unui Mock fără a -și reseta. Acest lucru înseamnă că puteți continua să utilizați aceleași cioturi, asigurându -vă că fiecare test începe cu o ardezie curată în ceea ce privește invocările metodei. Această metodă este utilă atunci când trebuie să verificați interacțiunile într -un scenariu de stat sau atunci când utilizați cadre de injecție de dependență, dar ar trebui să fie încă utilizată cu ușurință. În general, este recomandat să evitați utilizarea „ClearInvocations ()` dacă este necesar, deoarece poate complica testele, dacă nu sunt utilizate cu gândire [1] [4] [9].
Diferențe cheie
- Stubbing: `reset ()` elimină toate stupidele, necesitând să re-stuptați batjocura, în timp ce `ClearInvocations ()` lasă înțepător intact.
- Numărul de invocare: Ambele metode șterge numărul de invocare, dar `reset ()` face acest lucru ca parte a unei resetări complete, în timp ce `ClearInvocations ()` vizează în mod specific numărul de invocare.
- Complexitatea testului: Ambele metode pot duce la teste mai complexe, dacă nu sunt utilizate cu atenție, dar `Reset () tinde să provoace mai multe probleme din cauza necesității de a re-batjocori.
În rezumat, în timp ce ambele metode pot fi utilizate pentru a gestiona starea batjocoritoare, `reset ()` este mai invazivă și, în general, descurajată, în timp ce „ClearInvocations ()” este mai vizat, dar ar trebui să fie utilizate în mod judicios pentru a menține testele curate și concentrate.
Citări:[1] https://softwareEngineering.stackexchange.com/questions/188299/is-his-an-apprepropree-use-of-mockitos-reset-method
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearinvocations
[3] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearallcaches
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.clearinvocations
[5] https://stackoverflow.com/questions/19441538/what-is-the-correct-alternative-to-resetting-a-mock-after-setup-in-mockito
[6] https://reflectoring.io/clean-unit-tests-with-mockito/
[7] https://stackoverflow.com/questions/30081161/mockito-does-verify-method-reboot- number-of-times
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/mockito.html
[9] https://wesome.org/mockito-3-spear-invocations
[10] https://github.com/mockk/mockk/discussions/842