Existuje nekolik dulezitych duvodu proc vy muzete chtit pouzit nastaveni a uklid SQL jako cast vaseho unit testu. Jeden z techto duvodu je nutnost zkonfigurovat SQL tak, aby mit jistotu ze nejake podminky pred spustenim testu budou splneny. Napriklad, testovani [dbo].[Test Most Expensive Products] ulozene procedury nema smysl pokud v tabulce Products nejsou data. To znamena ze vy muzete chtit pridat nastavovaci SQL, ktery overy ze tabulka Product neni prazdna. Navic. Jestli vy testujete proceduru, ktera ma provadet mazani, to muzete potrebovat pridat radek v odpovidajici tabulce pred spustenim testu, aby mit jistotu ze tabulka obsahuje radek ktera ulozena procedura smaze. Stejne, jestli vy testujete ulozenu proceduru, ktera pridava radky, to muzete chtit odstranit radky, ktere byli behem testovani vytvoreny.
Team Edition for Database Professionals umoznuje takove nastaveni za pomoce pred-test a po-test skruptu. Uvnitr Team Edition for Database Professionals vy muzete opravit testovaci skript, pred-test skript nebo po-test skript. Implicitne, zobrazen testovaci skript, ale by muzete zobrazit jiny skript za pomoci druheho rozbalovaciho seznamu v Database Unit Test Designer.
Obrazek 12. Vyber pred-test a po-test skriptu
Kazdy testovaci skript muze mit prirazene SQL prikazy a testove podminky. To znamena, ze ve pripade [dbo].[Ten Most Expensive Products] ulozene procedury vy muzete mit nasledujici pred-test skript s podminkou Not Empty ResultSet:
SELECT * FROM dbo.Products
Navic, pro nastaveni specialnich pred-test i po-test skriptu pro kazdy databazovy unit test, vy muzete vyuzit moznost nastitelneho a uklizeciho testoveho skriptu ktere budou spustene pred a po kazdemu databazovemu unit testu v testove tride. Teto skripty jsou uzitecne pro provedni spolecneho nastaveni a uklizeni ktere musi byt provedene pro vsichni testy v teto testovaci tride. Pristup k temto skriptum dostanete pres kliknuti na (Common scripts) ve prvnim rozbalovacim sezname v Database Unit Test Designer a pak kliknutim na Test initialize nebo Test cleanup s druheho rozbalovaciho seznamu.
Obrazek 13. Vyber nastavovaciho a uklizeciho skriptu
Sprava stavu databazi
Dulezita vec v databazovem unit testovani je stav databaze. Tento ukol je znacne slozitejsi nez unit testovani aplikace. Kazdopadne, toto je zaklad pro provadeni databazovych unit testu, proto ze databaze je nic jineho nez sada dat a/nebo jejich stav.
Tohle vyvolava prvni otazku: Jak muzu garantovat za data v moji databazi jsou te, ktere potrebuje pro moji testy?
Tato otazka ma dve zakladni casti:
- Poprve, vy musite mit jistotu ze databaze ma odpovidajici stav, proto ze vy spustene sadu testu
- Podruhe, musite mit jistotu ze databaze ma odpovidajici stav mezi kazdym testem, ktery provadite.
Vy muzete vyuzit libovolnu z nekolika metod pro nastaveni zakladniho stavu:
- Pouzit nastroj na vytvareni dat pred spustenim sady testu. Tento metod je nejlepsi pro ovladani stavu databazi. Pro podporu teto metody, Team Edition for Database Professionals zahrnuje vyborny nastroj na generace dat. Vy muzete pouzit tento nastroj pro vyvoj planu pro generace dat ktery presne specifikuje jakym spusobem vy chcete vygenerovat data v tabulkach databazi. Plan obshajue docela chytre prednastaveni, ale vy muzete vsechno zmenit. Nastroj generuje opakovane testove data, to znamena ze muzete ocekavat stejne hodnoty pro kazde spusteni testu. Takova opakovatelnost je velice dulezita pro overeni testu.
- Aktualizovat databazi se zalozni kopie, nebo se pripojit k existujici databazi. Jestli vy uz mate testove data, ktere bych radi pouzili, caste je nejjednodussi automaticke aktualizovat databaze se zalozni kopie pred spustenim unit testu. Stejne, vy muzete se pripojist k existujici databazi na vasim serveru pred spustenim testu. Tato metoda stava problematicka, jestli databazovata schemata caste se meni, proto ze v tomto pripade muste pravidelne aktualizovat zalohu databaze.
- Rict ze testy nemaji stav i, jako cast kazdeho pred-testu, nastavovat odpovidajici stav. Tato metoda, i kdyz velice „cista“ z hlediska fylosofie, neni moc prakticka. Je to nejenom potrebuje hodne usili na pripravu, ale i spomaluje rychlost prednastaveni a uklizeni databazovych unit testu.
Druhy problem, ktery se tyka stavu mezi testami, ma taky vlastni sadu metod:
- Transakce – nejlepe vyresit tento problem je zabalit vasi unit testy do transakce, a pak ukoncit transakce po overeni testu i pred spustenim dalsiho. Tato metoda zajistuje ze vasi databazove testy jsou transakcni a tim padem vraceji databaze k jeji puvodnimu pred testem stavu.
- Cisteni stavu v kazdem po-test skriptu – jina metoda, dle ktere kazdy test musi vratit databaze k jeji puvodnimu stavu. Tato metoda vyzaduje vice rucni prace nez predchozi. Napriklad, jestli testujete ulozenu proceduru dbo.CreateAuction, budete muset v po-test skriptu odstranit aukce z odpovidajici tabulky aby mit databaze v jeji puvodnem stavu.