Visko tyčiojimasis testuose gali sukelti keletą galimų spąstų, o tai gali neigiamai paveikti jūsų bandymo strategijos efektyvumą ir patikimumą. Čia yra keletas pagrindinių klausimų, susijusių su pernelyg dideliu tyčiavimuisi:
1. Trapi testai ir įtempta jungtis **
Kai tyčiojatės iš kiekvienos priklausomybės, jūsų testai yra glaudžiai susieti su bandomo kodo diegimo informacija. Tai reiškia, kad net nedideli kodo vidinio darbo pokyčiai gali nutraukti bandymus, net jei išorinis elgesys nesikeičia. Tokie testai yra trapūs ir reikalauja dažnai atnaujinti, o tai gali būti daug laiko reikalaujanti ir varginanti [6] [9].
2. Melagingas pasitikėjimas ir paslėptos klaidos **
Per didelis tyčiojimasis gali sukelti klaidingą pasitikėjimą kodo patikimumu. Izoliuodami komponentus su juokais, galite praleisti realaus pasaulio problemas, kurios pasireiškia tik tada, kai visi komponentai sąveikauja kartu. Dėl to klaidos gali būti atrastos gamyboje, o ne bandymo metu, sumenkinant bandymo tikslą [1] [9].
3. Pertekliaus ir priežiūros iššūkiai **
Maktų kūrimas ir palaikymas, ypač sudėtingoms sistemoms, gali būti sudėtinga ir reikalaujanti daug laiko. Tobulėjant sistemai, gali tekti dažnai atnaujinti tyčiojimus, kad būtų atspindėti priklausomybių ar elgesio pokyčiai, kurie gali būti sudėtingi ir linkę į klaidas [9] [11].
4. Sunkumas patikrinti realaus pasaulio elgesį **
Visko tyčiojimasis gali apsunkinti patikrinimą, kaip sistema elgiasi realaus pasaulio scenarijuose. Integracijos testai, apimantys mažiau juokelių, dažnai yra geriau tinkami šiam tikslui. Per didelis pasitikėjimas tyčiojimais gali sukelti testus, kurie tiksliai neatspindi realaus pasaulio sąveikos [9] [11].
5. Neefektyvus išteklių naudojimas **
Per didelis tyčiojimasis gali sukelti neefektyvų išteklių naudojimą. Konfigūruoti tyčiojimus gali sunaudoti daugiau laiko, nei rašyti tikrąją bandymo logiką, ypač sunkiose duomenų bazėse ar sudėtingose sistemose [2] [11]. Šis neveiksmingumas gali sulėtinti plėtros procesą ir padidinti bandymo sąnaudas.
6. Sutapkite su integracijos testais **
Kai vienetų testai apima scenarijus, kurie taip pat yra testuojami atliekant integracijos testus be tyčiojimų, kyla klausimų apie šių vieneto testų pridėtinę vertę. Integracijos testai dažnai suteikia išsamesnį sistemos elgesio aprėptį, nereikalaujant išsamaus tyčiojimosi [2] [7].
7. Neteisingo elgesio su netinkamu elgesiu potencialas **
Jei tyčiojimai tiksliai nepaminėtų realių objektų, kuriuos jie keičia, elgseną, bandymai gali praeiti net tada, kai tikroji sistema sugenda. Tai gali sukelti klaidingą saugumo ir praleistų klaidų jausmą [5] [9].
Apibendrinant galima pasakyti, kad tyčiojimasis gali būti naudinga bandymo priemonė, tačiau dėl jo per didelis jo vartojimas gali sukelti trapius testus, klaidingą pasitikėjimą savimi ir neveiksmingumą. Labai svarbu protingai naudoti tyčiojimąsi ir, jei įmanoma, apsvarstyti tokias alternatyvas kaip integracijos testai.
Citatos:[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-uch-cocking-in-unit-tests-in-a-database-heavy-method
[3] https://ryanclements.dev/posts/you-probably-dont-reed-and-Mocking
[4] https://stackoverflow.com/questions/61793083/should-i-bock-every-single-dependencies-in-unit-test
[5] https://softwareEngineering.stackexchange.com/questions/382087/how-exactly-hould-unit-tests-be-written-without-Mocking-axtsity
[6] https://pytest-with-eric.com/mocking/pytest-common-cocking-problems/
[7] https://www.reddit.com/r/typescript/comment
[8] https://stackoverflow.com/questions/38181/when-Should-i-Mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/why-to-mock-in-5-mins/
[11] https://vinted.engineering/2023/10/02/Mocking-framework-downside/