Tvorba softwaru je složitý proces. Kromě zvládnutí různých nástrojů a programovacích jazyků je to také pochopení různých rolí při vývoji softwaru. Jak většina z nás ví, velké projekty nezahrnují pouze kódování. Do velkých projektů jsou zapojeny i další zdroje pro sběr požadavků, prototypování a testování.
Proces ověřování kódu se často označuje jako zajištění kvality. Toto slovní spojení je však poněkud zavádějící. Místo zajištění kvality kódu je skutečným cílem její měření – často v průběhu vývoje projektu. Tento jemný rozdíl, známý také jako vývoj řízený testy (např. TDD), je patrný při zkoumání rolí funkce kvality. Mezi ně patří následující:
PROČ JEDNOTLIVÉ TESTY?
Jak je vidět, měření kvality se často dělí na automatizované a manuální činnosti. Jako někdo, kdo se zajímá o algoritmy, pracuje při testování primárního softwarového projektu další kód známý jako jednotkové testy. Jednotkové testy obvykle píší vývojáři a v prostředí TDD je na ně kladen důraz. Například při vývoji této knihy jsou unit testy zásadní. Pomocí frameworku XCTest pro iOS si zopakujeme, jak unit testy ve Swiftu fungují.
PRACE S XCTESTEM
Pokud jste se seznámili s koncepty Swiftu probíranými v této knize, mělo by být učení se psaní unit testů jednoduché. Jak již bylo řečeno, jednotkové testy slouží k procvičování kódu, který postrádá rozhraní pro koncového uživatele. Pro ilustraci si projděme testovací případy, které procvičují datovou strukturu Stack.
Ačkoli se kniha nezabývá podrobnostmi integrovaného vývojového prostředí (IDE) Xcode, je třeba poznamenat, že testy lze provádět podle funkce, třídy nebo cíle. Pomocí Xcode se jednotkové testy vytvářejí přidáním nového cíle testů do primárního projektu kódu. Po nastavení lze jednotkové testy spouštět z prostředí IDE nebo z příkazového řádku.
PRAVIDLA TESTOVÁNÍ
Ačkoli to není nutné, za osvědčený postup se považuje, pokud soubor jednotkových testů přesně odpovídá konvenci pojmenování našeho implementačního souboru (souborů). V našem případě použijeme StackTest.swift. Abychom získali přístup k primárním metodám a vlastnostem zásobníku z našeho hlavního projektu, bude soubor obsahovat také testovací příkaz import:
Stejně jako jiné frameworky pro jednotkové testy funguje XCTest tak, že integruje vlastnosti jazyka Swift se specifickými funkcemi souvisejícími s testováním. Podstatné metody jsou seskupeny jako aserce. Při vytváření testů kompilátor rozpozná jednotkové testy s funkcemi s předponou test.
Na rozdíl od běžných funkcí jazyka Swift jsou jednotkové testy záměrně navrženy jako samostatné logické jednotky. V důsledku toho testovací metody nepřijímají argumenty a nevracejí hodnoty. Alternativně lze testovací data spravovat pomocí pomocných metod a inicializačních/rozbalovacích sekvencí. Uvažujme následující:
PLÁNOVÁNÍ TESTŮ
Jak již bylo řečeno, hlavní operací datové struktury Zásobník je přidávání a odebírání položek. Namísto psaní jediné funkce pro testování všech operací náš testovací plán izoluje každou hlavní operaci Zásobníku vlastním testem. Jak je vidět u testuPushStack, tvrzení XCTAssertTrue kontroluje správnou inicializaci proměnné Stack.count. Další krok zahrnuje procvičení Stack.push iterací přes pole položek numberList. Abychom ověřili, že každý test používá stejná data, je numberList naplněn pomocí metody setup třídy XCTestCase.
S implementovaným unit testem pro přidávání položek zásobníku můžeme napsat další test pro odebírání položek:
.