Il derubare tutto nei test può portare a diverse potenziali insidie, che possono influire negativamente sull'efficacia e l'affidabilità della strategia di test. Ecco alcuni dei problemi chiave associati all'eccessivo derisione:
1. Test fragili e accoppiamento stretto **
Quando deridere ogni dipendenza, i tuoi test diventano strettamente accoppiati ai dettagli di implementazione del codice in esame. Ciò significa che anche le modifiche minori nei meccanismi interni del codice possono interrompere i test, anche se il comportamento esterno rimane invariato. Tali test sono fragili e richiedono frequenti aggiornamenti, che possono richiedere tempo e frustranti [6] [9].
2. Falsa fiducia e bug nascosti **
Il deroga eccessivo può portare a una falsa fiducia nell'affidabilità del codice. Isolando i componenti con beffe, potresti perdere problemi del mondo reale che si manifestano solo quando tutti i componenti interagiscono insieme. Ciò può comportare scoprire bug nella produzione piuttosto che durante i test, minando lo scopo del test [1] [9].
3. Sfide di eccesso di complessità e manutenzione **
La creazione e il mantenimento di beffe, specialmente per sistemi complessi, può essere impegnativo e richiedere molto tempo. Man mano che il sistema si evolve, potrebbe essere necessario aggiornare frequentemente le mocks per riflettere i cambiamenti nelle dipendenze o nel comportamento, che possono essere ingombranti e soggetti a errori [9] [11].
4. Difficoltà a verificare il comportamento del mondo reale **
Deridere tutto può rendere difficile verificare come il sistema si comporta in scenari del mondo reale. I test di integrazione, che coinvolgono un minor numero di beffe, sono spesso più adatti a questo scopo. L'eccessiva dipendenza dai beffe può portare a test che non riflettono accuratamente le interazioni del mondo reale [9] [11].
5. Uso inefficiente delle risorse **
Il deroga eccessivo può portare a un uso inefficiente delle risorse. La configurazione di mock può consumare più tempo che scrivere la logica del test effettiva, specialmente in sistemi pesanti del database o complessi [2] [11]. Questa inefficienza può rallentare il processo di sviluppo e aumentare i costi di test.
6. Sovrapposizione con test di integrazione **
Quando i test unitari coprono gli scenari che vengono anche testati da test di integrazione senza momme di mute, solleva domande sul valore aggiunto da questi test unitari. I test di integrazione spesso forniscono una copertura più completa del comportamento del sistema senza la necessità di derogni ampi [2] [7].
7. Potenziale per comportamento simulato errato **
Se i mock non imitano accuratamente il comportamento degli oggetti reali che sostituiscono, i test possono passare anche quando il sistema effettivo fallirebbe. Questo può portare a un falso senso di sicurezza e bug mancati [5] [9].
In sintesi, mentre il beffardo può essere uno strumento utile nei test, eccessivamente può portare a test fragili, falsa fiducia e inefficienze. È fondamentale usare deridere in modo giudizioso e considerare alternative come i test di integrazione quando possibile.
Citazioni:[1] https://cs-syd.eu/posts/2021-10-22-why-mocking-is-a-bad-idea
[2] https://softwareEngineering.stackexchange.com/questions/454887/how-to-avoid-too-ducch-mocking-in-unit-tests-in-a-database-heavy-method
[3] https://ryanclements.dev/posts/you-probably-dont-need-mocking
[4] https://stackoverflow.com/questions/61793083/should-i-mock-every-single-drependency-in-unit-testing
[5] https://softwareEngineering.stackexchange.com/questions/382087/how-exactly-should-unit-tests-be-written-without-mock-mocking-extensivamente
[6] https://pytest-with-eric.com/Mocking/pytest-common-mock-problems/
[7] https://www.reddit.com/r/typescript/comments/1ei9f4a/is_it_me_or_mmocking_everything_everywhere_in/
[8] https://stackoverflow.com/questions/38181/when-hould-i-mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/what-to-mock-in-5-mins/
[11] https://vinted.engineering/2023/10/02/Mocking-Framework-downside/