Postupy: Testování částí řízené daty
Použitím knihovny jednotkových testů společnosti Microsoft pro spravovaný kód, je možné nastavit, aby metoda jednotkového testu získala hodnoty, použité v testovací metodě, ze zdroje dat.Metoda je spouštěna postupně, pro každý řádek zdroje dat, což umožňuje snadno testovat různé vstupy pomocí jediné metody.
Toto téma obsahuje následující oddíly:
Vytvoření datově řízeného jednotkového testu zahrnuje následující kroky:
Vytvořte zdroj dat, který obsahuje hodnoty, které používáte ve zkušební metodě.Zdroj dat může být jakýkoli typ, který je registrován v počítači spouštějícím test.
Přidejte do testovací třídy soukromé pole TestContext a veřejnou vlastnost TestContext.
Vytvořte metodu jednotkového testu a přidejte do ní atribut DataSourceAttribute.
Použijte vlastnost indexeru DataRow pro načtení hodnoty, která je použita v testu.
Testovaná metoda
Například předpokládejme, že jsme vytvořili:
Řešení nazvané MyBank, které přijímá a zpracovává transakce pro různé typy účtů.
Projekt v řešení MyBank, nazvaný BankDb, který spravuje transakce pro účty.
Třídu nazvanou Maths v projektu DbBank, která provádí matematické funkce tak, aby byly všechny transakce pro banku výhodné.
Projekt jednotkového testu nazvaný BankDbTests, pro testování chování komponenty BankDb.
Třídu jednotkového testu nazvanou MathsTests, pro ověření chování třídy Maths.
Budeme testovat metodu v Maths, která pomocí smyčky přidává dvě celá čísla:
public int AddIntegers(int first, int second)
{
int sum = first;
for( int i = 0; i < second; i++)
{
sum += 1;
}
return sum;
}
Vytvoření zdroje dat
Pro otestování metody AddIntegers, je třeba vytvořit datový zdroj, který specifikuje rozsah hodnot parametrů a očekávanou vrácenou sumu.V našem příkladu, byla vytvořena SQL Compact databáze nazvaná MathsData a tabulka s názvem AddIntegersData, která obsahuje následující sloupce a hodnoty
FirstNumber |
SecondNumber |
Sum |
---|---|---|
0 |
1 |
1 |
1 |
1 |
2 |
2 |
-3 |
-1 |
Přidání TestContext do testovací třídy
Knihovna jednotkových testů vytvoří objekt TestContext, pro uložení informací o zdroji dat pro datově řízený test.Knihovna poté nastaví tento objekt jako hodnotu vlastnosti TestContext, která byla vytvořena.
private TestContext testContextInstance;
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
Ve zkušební metodě, je přistupováno k datům prostřednictvím vlastnosti indexeru DataRow objektu TestContext.
Psaní testovací metody
Zkušební metoda pro AddIntegers je poměrně jednoduchá.Pro každý řádek ve zdroji dat, je zavolána metoda AddIntegers s hodnotami sloupců FirstNumber a SecondNumber jako parametry a je ověřena návratová hodnota proti hodnotě sloupce Sum:
[DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0; Data Source=C:\Data\MathsData.sdf;", "Numbers")]
[TestMethod()]
public void AddIntegers_FromDataSourceTest()
{
var target = new Maths();
// Access the data
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]);
int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
int actual = target.IntegerMethod(x, y);
Assert.AreEqual(expected, actual,
"x:<{0}> y:<{1}>",
new object[] {x, y});
}
Všimněte si, že metoda Assert obsahuje zprávu, která zobrazí hodnoty x a y neúspěšné iterace.Ve výchozím nastavení, jsou uváděné hodnoty expected a actual již zahrnuty do podrobností neúspěšného testu.
Specifikování DataSourceAttribute
Atribut DataSource určuje připojovací řetězec zdroje dat a název tabulky, které jsou používány v testovací metodě.Přesné informace v připojovacím řetězci se liší podle toho, jaký typ zdroje dat je použit.V tomto příkladu je použita databáze SqlServerCe.
[DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0;Data Source=C:\Data\MathsData.sdf", "AddIntegersData")]
Atribut DataSource má tři konstruktory.
[DataSource(dataSourceSettingName)]
Konstruktor s jedním parametrem používá pro připojení informace uložené v souboru app.config řešení.dataSourceSettingsName Je název prvku Xml v konfiguračním souboru, který obsahuje informace o připojení.
Použití souboru app.config umožňuje změnit umístění zdroje dat bez změn samotného jednotkového testu.Informace o vytvoření a použití souboru app.config, viz Návod: Použití konfiguračního souboru k definování zdroje dat.
[DataSource(connectionString, tableName)]
Konstruktor třídy DataSource se dvěma parametry určuje připojovací řetězec zdroje dat a název tabulky, která obsahuje data pro testovací metodu.
Připojovací řetězec závisí na typu zdroje dat, ale měl by obsahovat element Provider, který určuje neutrální název zprostředkovatele dat.
[DataSource(
dataProvider,
connectionString,
tableName,
dataAccessMethod
)]
Použití TestContext.DataRow pro přístup k datům
Pro přístup k datům v tabulce AddIntegersData, je třeba použít indexer TestContext.DataRow.DataRow je objekt DataRow, takže je možné získat hodnoty sloupců použitím indexu nebo názvu sloupce.Protože jsou hodnoty vráceny jako objekty, musíme je převést na příslušný typ:
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
Spuštění testu a zobrazení výsledků
Po dokončení tvorby testovací metody, je třeba sestavit projekt testu.Testovací metoda se zobrazí v okně Průzkumníka testů, ve skupině Nespuštěné testy.Jak jsou testy spuštěny, psány a znovu spuštěny, zobrazuje Průzkumník testů výsledky do skupin Neúspěšné testy, Úspěšné testy a Nespuštěné testy.Je možné zvolit Spustit všechny, pro spuštění všech testů, nebo Spustit..., pro vybrání podmnožiny testů.
Panel výsledků testu v horní části Průzkumníka je animován, po dobu běhu testu.Na konci běhu testů, bude panel zelený, pokud uspěly všechny testy, a červený, pokud některý z testů selhal.Souhrn běhu testů se objeví v podokně podrobností v dolní části okna Průzkumníka testů.Chcete-li zobrazit detaily testu v dolním podokně, zvolte test.
Pokud je spuštěna metoda AddIntegers_FromDataSourceTest z uvedeného příkladu, panel výsledků se zbarví to červena a testovací metoda je přesunuta do Neúspěšné testy. Datově řízený test selže, pokud selže některá z iterovaných metod zdroje dat.Pokud je v okně Průzkumníka testů zvolen neúspěšný datově řízený test, podokno detailů zobrazí výsledky všech iterací, které jsou identifikovány pomocí indexu datového řádku.V uvedeném příkladu je vidět, že algoritmus AddIntegers nesprávně zpracovává záporné hodnoty.
Když je metoda, zahrnutá v testu, opravena a test je znovu spuštěn, panel výsledků se zbarví do zelena a testovací metoda je přesunuta do skupiny Úspěšné testy.
Viz také
Referenční dokumentace
Koncepty
Ověřování kódu pomocí testování částí