Batchinarea tuturor la teste poate duce la mai multe capcane potențiale, ceea ce poate avea un impact negativ asupra eficacității și fiabilității strategiei de testare. Iată câteva dintre problemele cheie asociate cu batjocurarea excesivă:
1. Teste fragile și cuplare strânsă **
Când batjocoriți fiecare dependență, testele dvs. devin strâns cuplate cu detaliile de implementare ale codului testat. Aceasta înseamnă că chiar și modificări minore ale funcționării interne ale codului pot rupe testele, chiar dacă comportamentul extern rămâne neschimbat. Astfel de teste sunt fragile și necesită actualizări frecvente, care pot consuma timp și frustrant [6] [9].
###########.
Mockingul excesiv poate duce la o încredere falsă în fiabilitatea codului. Prin izolarea componentelor cu machete, s-ar putea să lipsească problemele din lumea reală care se manifestă doar atunci când toate componentele interacționează împreună. Acest lucru poate duce la descoperirea erorilor în producție, mai degrabă decât în testare, subminând scopul testării [1] [9].
3..
Crearea și menținerea batjocurării, în special pentru sisteme complexe, poate fi provocatoare și consumatoare de timp. Pe măsură ce sistemul evoluează, este posibil ca machetele să fie actualizate frecvent pentru a reflecta modificările de dependențe sau comportament, care pot fi greoaie și predispuse la erori [9] [11].
4. Dificultate în verificarea comportamentului din lumea reală **
Batchingul totul poate îngreuna verificarea modului în care sistemul se comportă în scenarii din lumea reală. Testele de integrare, care implică mai puține batjocuri, sunt adesea mai potrivite în acest scop. Supravegherea excesivă a machetelor poate duce la teste care nu reflectă cu exactitate interacțiunile din lumea reală [9] [11].
5. Utilizarea ineficientă a resurselor **
Mockingul excesiv poate duce la utilizarea ineficientă a resurselor. Configurarea machetelor poate consuma mai mult timp decât scrierea logicii de testare reale, în special în sistemele de baze de date grele sau complexe [2] [11]. Această ineficiență poate încetini procesul de dezvoltare și crește costurile de testare.
6. Suprapunere cu testele de integrare **
Atunci când testele unității acoperă scenarii care sunt testate și prin teste de integrare fără batjocură, ridică întrebări cu privire la valoarea adăugată de aceste teste unitare. Testele de integrare oferă adesea o acoperire mai cuprinzătoare a comportamentului sistemului, fără a fi nevoie de o batjocură extinsă [2] [7].
7. Potențial pentru un comportament batjocoritor incorect **
Dacă machetele nu imită cu exactitate comportamentul obiectelor reale pe care le înlocuiesc, testele pot trece chiar și atunci când sistemul real ar eșua. Acest lucru poate duce la un fals sentiment de securitate și erori ratate [5] [9].
În rezumat, în timp ce batjocurarea poate fi un instrument util în testare, suprautilizarea acestuia poate duce la teste fragile, încredere falsă și ineficiențe. Este crucial să folosești batjocoritor în mod judicios și să luăm în considerare alternative precum testele de integrare atunci când este posibil.
Citări:[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-much-mocking-in-unit-tests-in-a-database-heavy-method
[3] https://ryanclements.dev/posts/you-probable-dont-need-mocking
[4] https://stackoverflow.com/questions/61793083/should-i-mock-every-single-dependențe-in-unit-testing
[5] https://softwareEngineering.stackexchange.com/questions/382087/how-exactly-should-unit-tests-be-written-without-mocking-extensiv
[6] https://pytest-with-eric.com/mocking/pytest-common-mocking-problems/
[7] https://www.reddit.com/r/typescript/comments/1ei9f4a/is_it_me_or_mocking_everything_everywhere_in/
[8] https://stackoverflow.com/questions/38181/when-should-i-mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/what-to-mock-in-5-min/
[11] https://vinted.engineering/2023/10/02/mocking-framework-ondside/