Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ci sono delle insidie ​​comuni quando beccase eccezioni con mockito


Ci sono delle insidie ​​comuni quando beccase eccezioni con mockito


Quando si utilizza mockito per deridere le eccezioni, diverse insidie ​​comuni possono rendere i test meno efficaci o più difficili da mantenere. Ecco alcune di queste insidie ​​e come evitarle:

1. Over-behfock **

Una delle insidie ​​più significative è il bombardatura. Ciò si verifica quando deridere troppe dipendenze, portando a test fragili e difficili da mantenere. Il bombole eccessivo può far sì che i test si concentrino maggiormente sulle beffe che sul comportamento effettivo del sistema in esame. Per evitare questo, concentrati sul deridere solo i collaboratori che hanno un comportamento non banale o quelli le cui interazioni si desidera verificare. Usa istanze reali per semplici collaborazioni [3].

2. Eccezioni non valide **

Mockito garantisce che l'eccezione che viene lanciata sia valida per il metodo stuzzicato specifico. Se provi a lanciare un'eccezione che non si trova nell'elenco delle eccezioni controllate del metodo, Mockito si lamenterà. Ad esempio, se un metodo non dichiara `Ioexception`, tentando di deridere per lanciare un` Ioexception` comporterà un errore [1]. Assicurati sempre che l'eccezione derisa sia valida per il metodo.

3. Usando `thenthrow ()` con metodi vuoti **

`Quando (). Thenthrow ()` non può essere usato con metodi vuoti perché non vi è alcun valore di ritorno da deridere. Invece, usa `dothrow ()` per i metodi vuoti. La miscelazione di questi metodi in modo errato può portare a errori [2].

4. Mancanza di specificità **

Quando deridono le eccezioni, è fondamentale essere specifici su quali eccezioni stai testando. Evita di bombole eccessiva concentrandosi su eccezioni rilevanti per lo scenario di prova. Questo aiuta a mantenere i test focalizzati e mantenibili [2] [8].

5. Gestione errata delle esecuzioni **

Assicurarsi che il codice dell'applicazione sia pronto a gestire correttamente le eccezioni, anche se derisi durante i test. Ciò include testare la logica per la gestione delle eccezioni per assicurarsi che si comporti come previsto [2].

6. Uso di messaggi di errore significativi **

Quando si deridono le eccezioni, includi messaggi significativi per aiutare a diagnosticare i problemi se i test falliscono. Questa pratica migliora la chiarezza e l'efficacia dei test [2].

7. Test di gestione delle eccezioni logica **

Assicurarsi che il codice gestisca le eccezioni come previsto. Ciò comporta la verifica che l'applicazione si comporta correttamente quando vengono lanciate eccezioni, il che è cruciale per la costruzione di applicazioni resilienti [2].

8. Ripristino e cancellazione dei prestiti **

Mockito fornisce funzionalità come `reset ()` e `clearInvocations ()` per la gestione dei beffe. Tuttavia, questi dovrebbero essere usati con parsimonia. Il ripristino di una finta dovrebbe essere eseguito solo in rari casi, ad esempio quando una finta viene iniettata da un contenitore e non può essere ricreato per ogni test. La compensazione delle invocazioni può essere utile se la ricreazione di una finta porterebbe a un sovraccarico significativo [1].

Essendo consapevoli di queste insidie ​​e seguendo le migliori pratiche, puoi utilizzare efficacemente Mockito per deridere le eccezioni e assicurarti che i test siano robusti e mantenibili.

Citazioni:
[1] https://www.toptal.com/java/a-guide-to-everyday-mockito
[2] https://www.browserstack.com/guide/mockito-hrow-exception
[3] https://javanexus.com/blog/avoiding-mockito-testing-pitfalls
[4] https://stackoverflow.com/questions/9186604/mockito-exception-when-requires-an-argument-which-has-to-be-a-method-call-on
[5] https://stackoverflow.com/questions/22540108/best-practices-with-mockito
[6] https://stackoverflow.com/questions/52512548/mock-method-to-go-not-throw-an-exception/52514628
[7] https://contributors.scala-lang.org/t/mockito-testing-nulls-and-exceptions/3915
[8] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito