Če se posmehujete vsem v testih, lahko privede do več potencialnih pasti, kar lahko negativno vpliva na učinkovitost in zanesljivost vaše strategije testiranja. Tu je nekaj ključnih vprašanj, povezanih s pretiranim posmehovanjem:
1. krhki testi in tesna sklopka **
Ko se posmehujete vsaki odvisnosti, se vaši testi tesno povezujejo s podrobnostmi o izvedbi preskusne kode. To pomeni, da lahko celo manjše spremembe v notranjem delu kode prekinejo teste, tudi če zunanje vedenje ostane nespremenjeno. Takšni testi so krhki in zahtevajo pogoste posodobitve, ki so lahko zamudne in frustrirajoče [6] [9].
2. Lažno zaupanje in skrite hrošče **
Prekomerno posmehovanje lahko privede do lažnega zaupanja v zanesljivost kode. Če izolirate komponente z norčevanjem, boste morda zamudili vprašanja iz resničnega sveta, ki se kažejo le, ko se vse komponente komunicirajo skupaj. To lahko povzroči, da se napake odkrijejo v proizvodnji in ne med testiranjem, kar spodkopava namen testiranja [1] [9].
3. Izzivi prekomerne kompleksa in vzdrževanja **
Ustvarjanje in vzdrževanje posmeha, zlasti za zapletene sisteme, je lahko zahtevno in zamudno. Ko se sistem razvija, bo morda treba posmehovanje pogosto posodabljati, da odražajo spremembe odvisnosti ali vedenja, ki so lahko okorne in nagnjene k napakam [9] [11].
4. Težave pri preverjanju vedenja v resničnem svetu **
Če se posmehujete, lahko težko preverite, kako se sistem obnaša v scenarijih v resničnem svetu. Testi integracije, ki vključujejo manj posmehov, so za ta namen pogosto bolj primerni. Prekomerna odnos na posnetke lahko privede do testov, ki ne odražajo natančno interakcij v resničnem svetu [9] [11].
5. neučinkovita uporaba virov **
Prekomerno posmehovanje lahko privede do neučinkovite uporabe virov. Konfiguriranje posmehov lahko porabi več časa kot pisanje dejanske testne logike, zlasti v bazi podatkov ali zapletenih sistemih [2] [11]. Ta neučinkovitost lahko upočasni razvojni proces in poveča stroške testiranja.
6. Prekrivanje z integracijskimi testi **
Kadar enotne teste zajemajo scenarije, ki jih preizkušajo tudi integracijski testi brez posmeha, sproža vprašanja o dodani vrednosti s temi enotami. Integracijski testi pogosto zagotavljajo celovitejšo pokritost vedenja sistema brez potrebe po obsežnem posmehu [2] [7].
7. Potencial za napačno vedenje **
Če se norci ne natančno posnemajo obnašanja resničnih predmetov, ki jih nadomeščajo, lahko preskusi opravijo, tudi če dejanski sistem ne bi uspel. To lahko privede do lažnega občutka varnosti in zgrešenih napak [5] [9].
Če povzamemo, medtem ko je posmehovanje lahko koristno orodje pri testiranju, lahko pretiravanje privede do krhkih testov, lažnega zaupanja in neučinkovitosti. Ključnega pomena je, da se preusmerjeno uporabite in upoštevate alternative, kot so integracijski testi, kadar je to mogoče.
Navedbe:[1] https://cs-syd.eu/posts/2021-10-22-why-cocking-is-a-bad-idea
[2] https://softwareengineering.stackexchange.com/questions/454887/how-to-avoid-too-moocking-in-unit-tests-in-adabase-heavy-Method
[3] https://ryanclements.dev/posts/you-probable-dont-need-chocking
[4] https://stackoverflow.com/questions/61793083/should-i-mock-every-single-odvisnosti v testiranju
[5] https://softwareengineering.stackexchange.com/Questions/382087/how-exactly-houth-unit-tests-be-be-warten-without-whout-extenzivno
[6] https://pytest-with-eric.com/mocking/pytest-common-mocking-problems/
[7] https://www.reddit.com/r/typescript/comments/1ei9f4a/is_me_me_mocking_mocking_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/