IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

2. diel - Testovanie vo VB.NET - Úvod do unit testov a príprava projektu

V minulej lekcii, Testovanie vo VB.NET - Úvod do testovania , sme si urobili pomerne solídny úvod do problematiky testovania vo VB .NET. Tiež sme si uviedli v-model, ktorý znázorňuje vzťah medzi jednotlivými výstupmi fáz návrhu a príslušnými testami.

V dnešnom tutoriále Testovania vo VB .NET sa budeme venovať jednotkovým testom (unit testy), ktoré testujú detailnú špecifikáciu aplikácie, teda jej triedy.

Unit testy píšeme vždy na základe návrhu, nie implementácie. Inými slovami, robíme ich na základe očakávanej funkčnosti. Tá môže byť buď priamo od zákazníka (v prípade akceptačných testov) alebo už od programátora (architekta). Vo funkčnosti je špecifikované, ako sa má ktorá metóda správať.

Nikdy nepíšeme testy podľa toho, ako je niečo vo vnútri naprogramované! Veľmi jednoducho by to mohlo naše myslenie zviesť iba tým daným spôsobom. Zabudli by sme na to, že metóde môžu prísť napríklad aj iné vstupy. A na tieto vstupy potom nebude pripravená. Testovanie s implementáciou v skutočnosti vôbec nesúvisí. Vždy testujeme či je splnené zadanie.

Aké triedy testujeme

Unit testy testujú jednotlivé metódy v triedach. Nemá veľký zmysel testovať jednoúčelové metódy napr. v modeloch, ktoré napr. iba niečo vyberajú z databázy. Aby sme boli konkrétnejší, nemá zmysel testovať metódu ako je táto:

Metóda pridáva položku do databázy. Typicky je použitá len v nejakom formulári. Pokiaľ by metóda nefungovala, zistí to akceptačné testy. Nová položka by sa neobjavila v zozname. Podobných metód je v aplikácii veľa. Zbytočne by sme strácali čas pokrývaním niečoho, čo ľahko pokryjeme v iných testoch.

Unit testy nájdeme najčastejšie pri knižniciach, ktoré programátor používa na viacerých miestach alebo dokonca vo viacerých projektoch. Keď použijeme nejakú knižnicu (napr. stiahnutú z GitHubu) veľmi pravdepodobne budú u nej aj testy.

Pokiaľ napr. píšeme aplikáciu, v ktorej často potrebujeme nejaké matematické výpočty (napr. faktoriály a ďalšie pravdepodobnostné funkcie), je samozrejmosťou vytvoriť si na tieto výpočty knižnicu. Je veľmi dobrý nápad pokryť takú knižnicu testy.

My si podobnú triedu vytvoríme a skúsime si ju otestovať. Aby sme sa nezdržiavali, budeme tvoriť iba jednoduchú kalkulačku. Tá bude vedieť:

  • sčítať,
  • odčítať,
  • násobiť,
  • deliť.
Vytvorenie projektu

V praxi by v triede boli nejaké zložitejšie výpočty, ale tým sa tu nebudeme zaoberať. Vytvorme si nový projekt typu konzolová aplikácia s názvom KalkulackaApp. Do neho si pridáme verejnú (Public) triedu Kalkulacka s nasledujúcou implementáciou:

Na kóde je zaujímavá iba metóda Vydel() vyvolávajúca výnimku v prípade, že delíme nulou.

Menný priestor UnitTesting

Vo VB .NET sa unit testy píšu pomocou nástrojov z menného priestoru Microsoft.VisualStudio.TestTools.UnitTesting. Visual Studio poskytuje plnú podporu týchto testov. Do svojej aplikácie budeme pridávať testy ako ďalší projekt do solution. Testy teda budú od projektu úplne oddelené, čo je návrhovo veľká výhoda. Iba nesmieme zabudnúť projekty prepojiť príslušnými referenciami.

V okne Solution Explorer klikneme na Solution KalkulackaApp pravým tlačidlom a zvolíme Add -> New Project...

Testovanie vo VB.NET

V ďalšom kroku vyberieme šablónu MSTest Test Project:

testkalk_vyber_sablona - Testovanie vo VB.NET

Neskôr zvolíme názov projektu s testami, ktorý sa spravidla zostavuje ako názov projektu aplikácie + slovo Tests. V našom prípade teda KalkulackaAppTests:

Testovanie vo VB.NET

A nakoniec potvrdíme typ frameworku NET 6.0:

testkalk_potvr_nazov_typ - Testovanie vo VB.NET

Do testovacieho projektu teraz musíme pridať referenciu na projekt s aplikáciou, aby sme mohli pristupovať k príslušným triedam. To urobíme kliknutím pravým tlačidlom na projekt KalkulackaAppTests a zvolením Add -> Project Reference...:

testkalk_ref_pridani - Testovanie vo VB.NET

V nasledujúcom formulári vyberieme záložku Projects -> Solution a zaškrtneme projekt KalkulackaApp. Dialóg potvrdíme, čím si sprístupníme triedu Kalkulacka:

testkalk_ref_potvrdenie - Testovanie vo VB.NET

V projekte KalkulackaAppTest sa nám vygeneroval nový súbor UnitTest1.cs s nasledujúcim kódom:

V objektovom VB.NET je test triedy (scenár) reprezentovaný aj triedou a jednotlivé testy sú reprezentované metódami.

S atribútmi (lomenými zátvorkami nad metódami a triedami) sme sa už v seriáli stretli. Atribút <TestClass> tu označuje testovací scenár. Atribútom <TestMethod> vidíme označené metódy, ktoré reprezentujú jednotlivé testy (budú automaticky spúšťané Visual Studiom). Triedu UnitTest1 (aj jej súbor) si premenujeme na KalkulackaTests, pretože bude obsahovať testy pre triedu Kalkulacka.

Pokrytie triedy testy

V unit testoch môžeme použiť ešte niekoľko ďalších atribútov. My teraz využijeme atribút <TestInitialize> a pre názornosť aj atribút <TestCleanup>. Týmito atribútmi označujeme metódy, ktoré sa zavolajú pred (resp. po každom teste) v tejto triede. To je pre nás veľmi dôležité. Podľa best practices chceme, aby boli testy nezávislé. Obvykle teda pred každým testom pripravujeme znova to isté prostredie, aby sa testy vzájomne vôbec neovplyvňovali. O dobrých praktikách sa zmienime neskôr detailnejšie.

Do triedy KalkulackaTests si teraz najprv pridajme menný priestor Imports KalkulackaApp a potom Private premennú kalkulacka. V metóde s anotáciou <TestInitialize> si do premennej kalkulacka vytvoríme novú kalkulačku pre každý test. Ak by ju bolo ešte potrebné ďalej nastavovať (napr. vytvoriť ďalšie závislosti) boli by aj v tejto metóde. Metódu TestMethod1() odstránime.

Náš kód triedy KalkulackaTests po zmenách vyzerá nasledovne:

Máme všetko pripravené na pridávanie samotných testov.

V budúcej lekcii, Testovanie vo VB.NET - Dokončenie unit testov a best practices , pokryjeme triedu unit testy, vysvetlíme si metódy na triede Assert a naučíme sa testovať výnimky. Spomenieme best practices.


 

Predchádzajúci článok
Testovanie vo VB.NET - Úvod do testovania
Všetky články v sekcii
Testovanie vo VB.NET
Preskočiť článok
(neodporúčame)
Testovanie vo VB.NET - Dokončenie unit testov a best practices
Článok pre vás napísal Stanislav Zita
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity