A szoftverkészítés összetett folyamat. A különböző eszközök és programozási nyelvek elsajátításán túl a különböző szoftverfejlesztői szerepek megértése is fontos. Mint azt a legtöbben tudjuk, a nagyszerű projektek nem csak kódolásból állnak. A nagy projektek más erőforrásokat is bevonnak a követelmények összegyűjtésébe, a prototípusok kialakításába és a tesztelésbe.
A kód validálásának folyamatát gyakran nevezik minőségbiztosításnak. Ez a kifejezés azonban némileg félrevezető. A kód minőségének biztosítása helyett a valódi cél annak mérése – gyakran a projekt fejlődése során. A tesztvezérelt fejlesztésnek (pl. TDD) is nevezett finom különbség a minőségfunkciós szerepek vizsgálatakor válik láthatóvá. Ezek közé tartoznak a következők:
Miért UNIT TESTS?
Amint látható, a minőségmérést gyakran csoportosítják automatizált és manuális tevékenységekre. Az algoritmusok iránt érdeklődőként az egységtesztek néven ismert kiegészítő kód dolgozik az elsődleges szoftverprojekt tesztelésén. Az egységteszteket általában a fejlesztők írják, és a TDD-környezetben ezek állnak a középpontban. Ennek a könyvnek a fejlesztésében például alapvető fontosságúak az egységtesztek. Az iOS XCTest keretrendszer segítségével áttekintjük, hogyan működik az egységtesztelés a Swiftben.
MŰKÖDÉS AZ XCTESTtel
Ha már megismerkedtünk a könyvben áttekintett Swift-fogalmakkal, az egységtesztek írásának megtanulása egyszerűnek kell lennie. A tárgyaltak szerint az egységtesztek olyan kód gyakorlására szolgálnak, amelynek nincs végfelhasználói felülete. Ennek illusztrálására tekintsük át a Stack adatszerkezetet gyakorló teszteseteket.
Míg a könyv nem tekinti át az Xcode integrált fejlesztőkörnyezet (IDE) sajátosságait, meg kell jegyezni, hogy a teszteket függvényenként, osztályonként vagy célpontonként lehet végrehajtani. Az Xcode használatával az egységtesztek úgy hozhatók létre, hogy az elsődleges kódprojekthez egy új tesztcélt adunk hozzá. A konfigurálás után az egységtesztek az IDE-ből vagy a parancssorból futtathatók.
TESZT SZABÁLYOK
Noha nem kötelező, legjobb gyakorlatnak tekinthető, ha az egységtesztfájl szorosan megegyezik az implementációs fájl(ok) elnevezési konvenciójával. Esetünkben a StackTest.swift fájlt fogjuk használni. Ahhoz, hogy a fő projektünkből hozzáférjünk az elsődleges Stack metódusokhoz és tulajdonságokhoz, a fájl tartalmazni fog egy tesztelhető import utasítást is:
A többi egységteszt-keretrendszerhez hasonlóan az XCTest is úgy működik, hogy a Swift nyelvi jellemzőket integrálja a teszteléssel kapcsolatos speciális funkciókkal. Az alapvető módszerek állításokként vannak csoportosítva. A tesztek létrehozásakor a fordító felismeri az egységteszteket a teszt kulcsszóval előtaggal ellátott függvényekkel.
A normál Swift függvényektől eltérően az egységtesztek szándékosan úgy vannak kialakítva, mint a logika önálló egységei. Ennek eredményeként a tesztmódszerek nem fogadnak el argumentumokat, és nem adnak vissza értékeket. Alternatívaként a tesztadatokat segédmetódusokon és inicializálási/leépítési szekvenciákon keresztül lehet kezelni. Tekintsük a következőket:
TESZTTERVEZÉS
Amint tárgyaltuk, a Stack adatstruktúra fő művelete az elemek hozzáadása és eltávolítása. Ahelyett, hogy egyetlen függvényt írnánk az összes művelet tesztelésére, teszttervünk minden fontosabb Stack műveletet külön teszttel különít el. Ahogy a testPushStack esetében is látható, az XCTAssertTrue állítás a Stack.count változó helyes inicializálását ellenőrzi. A következő lépés a Stack.push gyakorlása a numberList elemek tömbjének iterálásával. Annak ellenőrzésére, hogy minden teszt ugyanazokat az adatokat használja, a numberList-et az XCTestCase osztály setup metódusával töltjük fel.
A Stack elemek hozzáadásának egységtesztjét végrehajtva megírhatjuk a következő tesztet az elemek eltávolítására: