Čo je testovanie jednotiek?
UNIT TESTING je typ testovania softvéru, pri ktorom sa testujú jednotlivé jednotky alebo komponenty softvéru. Účelom je overiť, že každá jednotka softvérového kódu funguje podľa očakávania. Testovanie jednotiek sa vykonáva počas vývoja (fázy kódovania) aplikácie vývojármi. Testy jednotiek izolujú časť kódu a overujú jeho správnosť. Jednotkou môže byť samostatná funkcia, metóda, postup, modul alebo objekt.
V SDLC, STLC, V modeli je testovanie jednotky prvou úrovňou testovania vykonaného pred testovaním integrácie. Testovanie jednotiek je technika testovania WhiteBox, ktorú zvyčajne vykonáva vývojár. Aj keď v praktickom svete kvôli časovej tiesni alebo neochote vývojárov testovať, robia inžinieri QA aj testovanie jednotiek.
V tomto návode sa naučíte
- Prečo testovanie jednotiek?
- Ako urobiť Testovanie jednotiek
- Techniky testovania jednotiek
- Nástroje na testovanie jednotiek
- Testovaný vývoj (TDD) a testovanie jednotiek
- Mýtus o testovaní jednotiek
- Výhoda testovania jednotky
- Nevýhody pri testovaní jednotiek
- Osvedčené postupy pri testovaní jednotiek
Prečo testovanie jednotiek?
Testovanie jednotiek je dôležité, pretože vývojári softvéru sa niekedy snažia ušetriť čas minimálnym testovaním jednotiek, čo je mýtus, pretože nevhodné testovanie jednotiek vedie k vysokému nákladu na odstránenie chýb počas testovania systému, testovania integrácie a dokonca aj testovania verzie beta po vytvorení aplikácie. Ak sa v počiatočnom vývoji vykoná správne testovanie jednotiek, ušetrí to nakoniec čas a peniaze.
Tu sú hlavné dôvody na vykonávanie testovania jednotiek v softvérovom inžinierstve:

- Testy jednotiek pomáhajú opraviť chyby na začiatku vývojového cyklu a šetria náklady.
- Pomáha vývojárom pochopiť základňu testovacích kódov a umožňuje im rýchle zmeny
- Dobré jednotkové testy slúžia ako projektová dokumentácia
- Testy jednotiek pomáhajú pri opätovnom použití kódu. Migrujte svoj kód aj svoje testy do nového projektu. Upravujte kód, kým sa testy znova nespustia.
Ako urobiť Testovanie jednotiek
Za účelom vykonania Unit Testingu vývojári napíšu časť kódu na otestovanie konkrétnej funkcie v softvérovej aplikácii. Vývojári môžu tiež izolovať túto funkciu, aby dôslednejšie testovali, čo odhalí zbytočné závislosti medzi testovanou funkciou a ostatnými jednotkami, aby bolo možné závislosti vylúčiť. Vývojári všeobecne používajú rámec UnitTest na vývoj automatizovaných testovacích prípadov pre testovanie jednotiek.
Testovanie jednotiek je dvoch typov
- Manuálny
- Automatizované
Testovanie jednotiek je zvyčajne automatizované, ale stále sa môže vykonávať ručne. Softvérové inžinierstvo nepreferuje jeden pred druhým, ale uprednostňuje sa automatizácia. Manuálny prístup k testovaniu jednotky môže vyžadovať podrobný inštruktážny dokument.
Podľa automatizovaného prístupu
- Vývojár napíše do aplikácie časť kódu, len aby otestoval funkciu. Neskôr by sa vyjadrili a nakoniec nasadili testovací kód, keď bude aplikácia nasadená.
- Vývojár by tiež mohol izolovať funkciu a dôslednejšie ju otestovať. Toto je dôkladnejší postup testovania jednotiek, ktorý zahŕňa kopírovanie a vkladanie kódu do jeho vlastného testovacieho prostredia ako do jeho prirodzeného prostredia. Izolovanie kódu pomáha odhaliť nepotrebné závislosti medzi testovaným kódom a ostatnými jednotkami alebo údajovými priestormi v produkte. Tieto závislosti je potom možné eliminovať.
- Kodér všeobecne používa rámec UnitTest na vývoj automatizovaných testovacích prípadov. Pomocou automatizačného rámca vývojár kóduje kritériá do testu na overenie správnosti kódu. Počas vykonávania testovacích prípadov framework zaznamenáva zlyhávajúce testovacie prípady. Mnohé rámce tiež automaticky označia a nahlásia tieto zlyhané testovacie prípady. V závislosti na závažnosti poruchy môže rámec zastaviť následné testovanie.
- Pracovný postup pri testovaní jednotiek je 1) Vytvorenie testovacích prípadov 2) Kontrola / prepracovanie 3) Východisková hodnota 4) Vykonanie testovacích prípadov.
Techniky testovania jednotiek
Tieto jednotky Skúšobné techniky sú rozdelené predovšetkým do troch častí, ktoré sú Black box testovanie, ktorý zahŕňa testovanie používateľského rozhrania spolu so vstupom a výstupom, skrinka testovanie White, ktorý zahŕňa testovanie funkčné správanie softvérové aplikácie a testovanie šedej krabice, ktorá sa používa na vykonanie testu sady, testovacie metódy, testovacie prípady a vykonávanie analýz rizík.
Techniky pokrytia kódu použité pri testovaní jednotiek sú uvedené nižšie:
- Pokrytie vyhlásenia
- Pokrytie rozhodnutia
- Pokrytie pobočky
- Pokrytie stavu
- Pokrytie stroja konečného stavu
Viac informácií nájdete na https://www.guru99.com/code-coverage.html
Príklad testu jednotky: Vysmievať sa predmetom
Testovanie jednotiek závisí od vytvorenia falošných objektov na testovanie častí kódu, ktoré ešte nie sú súčasťou kompletnej aplikácie. Mock objekty vyplniť pre chýbajúce časti programu.
Napríklad môžete mať funkciu, ktorá potrebuje premenné alebo objekty, ktoré ešte nie sú vytvorené. Pri testovaní jednotiek budú tieto účtované vo forme simulovaných objektov vytvorených výlučne na účely jednotkového testovania vykonaného v tejto časti kódu.
Nástroje na testovanie jednotiek
Existuje niekoľko automatizovaných softvérov na testovanie jednotiek, ktoré uľahčujú testovanie jednotiek. Ďalej uvedieme niekoľko príkladov:
- Junit: Junit je bezplatne použiteľný testovací nástroj používaný v programovacom jazyku Java. Poskytuje tvrdenia na identifikáciu testovacej metódy. Tento nástroj najskôr otestuje údaje a potom ich vloží do kódu.
- NUnit: NUnit je široko používaný rámec pre testovanie jednotiek používaný vo všetkých jazykoch .net. Je to open source nástroj, ktorý umožňuje manuálne písanie skriptov. Podporuje testy založené na dátach, ktoré môžu prebiehať paralelne.
- JMockit: JMockit je open source nástroj na testovanie jednotiek. Je to nástroj na pokrytie kódu s metrikami čiary a cesty. Umožňuje zosmiešňovanie API so syntaxou nahrávania a overovania. Tento nástroj ponúka pokrytie liniek, pokrytie ciest a pokrytie dát.
- EMMA: EMMA je open-source súbor nástrojov na analýzu a vykazovanie kódu napísaného v jazyku Java. Emma podporuje typy pokrytia ako metóda, linka, základný blok. Je založený na prostredí Java, teda bez závislostí od externej knižnice a má prístup k zdrojovému kódu.
- PHPUnit: PHPUnit je nástroj na testovanie jednotiek pre programátora PHP. Trvá malé časti kódu, ktorý sa nazýva jednotky, a každú z nich otestujte osobitne. Tento nástroj tiež umožňuje vývojárom používať preddefinované metódy tvrdenia na zabezpečenie toho, že sa systém správa určitým spôsobom.
Je to iba niekoľko dostupných nástrojov na testovanie jednotiek. Existuje oveľa viac, najmä pre jazyky C a Javu, ale určite nájdete nástroj na testovanie jednotiek pre svoje programovacie potreby bez ohľadu na jazyk, ktorý používate.
Testovaný vývoj (TDD) a testovanie jednotiek
Testovanie jednotiek v TDD zahŕňa rozsiahle použitie testovacích rámcov. Rámec jednotkových testov sa používa na vytvorenie automatizovaných jednotkových testov. Jednotkové testovacie rámce nie sú pre TDD jedinečné, ale sú preň nevyhnutné. Ďalej sa pozrieme na to, čo TDD prináša do sveta testovania jednotiek:
- Testy sa píšu pred kódom
- Dôrazne sa spoľahnite na testovacie rámce
- Testované sú všetky triedy v aplikáciách
- Je možná rýchla a ľahká integrácia
Mýtus o testovaní jednotiek
Mýtus: Vyžaduje si to čas a ja som vždy preplánovaný. Môj kód je pevný! Nepotrebujem jednotkové testy.
Mýty sú zo svojej podstaty falošné domnienky. Tieto predpoklady vedú k začarovanému cyklu nasledovne -
Pravdou je, že testovanie jednotiek zvyšuje rýchlosť vývoja.
Programátori si myslia, že Testovanie integrácie zachytí všetky chyby a nevykoná test jednotky. Len čo sú jednotky integrované, je možné veľmi ľahko zistiť a opraviť veľmi jednoduché chyby, ktoré bolo možné v testovanej jednotke ľahko nájsť a opraviť.
Výhoda testovania jednotky
- Vývojári, ktorí sa chcú dozvedieť, aké funkcie poskytuje jednotka a ako ju používať, sa môžu pozrieť na testy jednotky a získať základné znalosti o API jednotky.
- Testovanie jednotiek umožňuje programátorovi refaktorovať kód neskôr a ubezpečiť sa, že modul stále funguje správne (tj. Regresné testovanie). Procedúra spočíva v napísaní testovacích prípadov pre všetky funkcie a metódy, aby bolo možné kedykoľvek rýchlo identifikovať a opraviť každú zmenu, ktorá spôsobí chybu.
- Kvôli modulárnej povahe testovania jednotiek môžeme testovať časti projektu bez toho, aby sme čakali na dokončenie ďalších.
Nevýhody pri testovaní jednotiek
- Nemožno očakávať, že testovanie jednotky zachytí každú chybu v programe. Nie je možné vyhodnotiť všetky cesty vykonania ani v tých najtriviálnejších programoch
- Testovanie jednotiek je zo svojej podstaty zamerané na jednotku kódu. Preto nedokáže zachytiť chyby integrácie alebo široké chyby na úrovni systému.
Odporúča sa jednotkové testovanie používať spolu s ďalšími testovacími činnosťami.
Osvedčené postupy pri testovaní jednotiek
- Jednotkové testovacie prípady by mali byť nezávislé. V prípade akýchkoľvek vylepšení alebo zmien v požiadavkách by to nemalo mať vplyv na testovacie prípady jednotky.
- Testujte iba jeden kód súčasne.
- Pri testoch jednotky postupujte podľa jasných a konzistentných konvencií pomenovania
- V prípade zmeny kódu v ktoromkoľvek module sa uistite, že pre modul existuje zodpovedajúci testovací prípad jednotky a modul pred zmenou implementácie prejde testami
- Chyby zistené počas testovania jednotky musia byť opravené pred pokračovaním do ďalšej fázy v SDLC
- Osvojte si prístup „otestujte ako svoj kód“. Čím viac kódu napíšete bez testovania, tým viac ciest budete musieť skontrolovať, či neobsahujú chyby.

Zhrnutie
- UNIT TESTING je definovaný ako typ testovania softvéru, pri ktorom sa testujú jednotlivé jednotky alebo komponenty softvéru.
- Ako vidíte, na testovaní jednotiek môže byť veľa. Môže to byť zložité alebo skôr jednoduché v závislosti od testovanej aplikácie a použitých testovacích stratégií, nástrojov a filozofií. Testovanie jednotiek je vždy potrebné na určitej úrovni. To je istota.