Mockito fornisce due metodi che possono essere utilizzati per gestire lo stato delle beffe durante i test: `reset ()` e `clearInvocations ()`. Mentre entrambi i metodi sono usati per gestire lo stato finto, servono a scopi diversi e hanno effetti distinti sulle beffe.
Mockito's `reset ()` Metodo
Il metodo `reset ()` in mockito viene utilizzato per ripristinare completamente un oggetto simulato. Ciò significa che non solo cancella i conteggi di invocazione, ma rimuove anche qualsiasi tobbazzino che è stato impostato sulla finta. Questo può essere problematico perché richiede di ri-studiare il finto dopo averlo ripristinato se si desidera mantenere un comportamento specifico per i test. L'uso di `reset ()` è generalmente scoraggiato perché può portare a test complessi e meno focalizzati. Si consiglia di evitare di usare `reset ()` a meno che non sia assolutamente necessario, in quanto può oscurare l'intento dei test e renderli più difficili da mantenere [1] [5] [7].
Mockito's `clearInvocations ()` Metodo
Il metodo `clearInvocations ()`, introdotto in mockito 2.1, consente di cancellare i conteggi di invocazione di un simulato senza ripristinare la sua tozioning. Ciò significa che puoi continuare a utilizzare gli stessi stub, garantendo che ogni test inizi con una lista pulita per quanto riguarda le invocazioni dei metodi. Questo metodo è utile quando è necessario verificare le interazioni in uno scenario stato o quando si utilizzano framework di iniezione di dipendenza, ma dovrebbe comunque essere usato con parsimonia. Si consiglia generalmente di evitare di usare `clearInvocations ()` se non necessario, in quanto può anche complicare i test se non utilizzati in modo pensieroso [1] [4] [9].
differenze chiave
- Stubing: `reset ()` Rimuove tutto lo stoping, richiedendo di ri-studiare la finta, mentre `clearInvocations ()` foglie intatte.
- Conte di invocazione: entrambi i metodi cancella i conteggi di invocazione, ma `reset ()` lo fa come parte di un ripristino completo, mentre `clearInvocations ()` bersaglio specificamente conteggi di invocazione.
- Complessità dei test: entrambi i metodi possono portare a test più complessi se non utilizzati attentamente, ma `reset ()` tende a causare più problemi a causa della necessità di ri-studiare.
In sintesi, mentre entrambi i metodi possono essere utilizzati per gestire lo stato finto, `reset ()` è più invasivo e generalmente scoraggiato, mentre `clearInvocations ()` è più mirato ma dovrebbe essere ancora usato in modo giudizioso per mantenere test puliti e focalizzati.
Citazioni:[1] https://softwareEngineering.stackexchange.com/questions/188299/is-this-an-appied-usao-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-mimes
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/mockito.html
[9] https://wesome.org/mockito-3-lear-invocations
[10] https://github.com/mockk/mockk/discussions/842