Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon In che modo il metodo di ripristino di Mockito differisce dalle clearInvocations


In che modo il metodo di ripristino di Mockito differisce dalle clearInvocations


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