Základy Test jednotky
Toto téma popisuje základy psaní a spuštěn test jednotky v Průzkumníku Test Visual Studio.Obsahuje následující části:
Unit testing overview
- Quick starts
The MyBank Solution example
Creating the unit test projects
Writing your tests
Running tests in Test Explorer
Running and viewing tests from the Test Explorer toolbar
Running tests after every build
Filtering and grouping the test list
Debugging unit tests
Additional tools for unit tests
Generating application code from tests
Generating multiple tests by using data driven test methods
Analyzing unit test code coverage
Isolating unit test methods with Microsoft Fakes
Přehled testování jednotek
Visual Studio Test Explorer je navržen pro podporu vývojáře a týmy, kteří začlenit testování jednotky v jejich postupy vývoje softwaru.Testování vám pomůže zajistit správnost programu ověřením, že kód aplikace neobsahuje očekávání provést.V jednotce testování analyzovat funkce programu zjistit diskrétní testable chování, které můžete vyzkoušet za individuální jednotky.Použití rámci testování jednotky vytvoření zkoušky těchto chování a zprávu o výsledcích těchto zkoušek.
Testování má největší vliv, pokud je nedílnou součástí pracovního postupu vývoje softwaru.Při psaní funkci nebo jiných blok kódu aplikace vytvořit jednotku testy, ověřit chování kódu v reakci na standard, hranice a nesprávné případech vstupních dat a který ověřit žádné explicitní nebo implicitní předpoklady kód.Do praxe vývoje softwaru známé jako test motorovým rozvoje, vytvoření jednotky testy před psát kód, tak pomocí zkoušky jednotky jako konstrukční dokumentace a funkční specifikace funkcí.
Test Explorer poskytuje flexibilní a efektivní způsob, jak spustit testy jednotky a jejich výsledky zobrazit v aplikaci Visual Studio.Visual Studio nainstaluje Microsoft testování rámců pro spravované a nativní kód.Test Explorer můžete také spustit výrobců a otevřít zdroj rámce test jednotky, které mají implementováno rozhraní doplňku Explorer otestujte.Mnoho těchto rámců pomocí Správce rozšíření Visual Studio a Visual Studio galerie můžete přidat.VizJak: instalace rámce Test jednotek výrobců
Test Explorer zobrazení můžete zobrazit všechny testy nebo nebyly dosud spustit pouze testy, které prošly se nezdařilo, nebo vynechána.Testy v libovolném zobrazení můžete filtrovat odpovídající text do vyhledávacího pole na globální úrovni nebo výběrem jedné z předdefinovaných filtrů.Libovolný výběr testů můžete spustit kdykoli.Při použití Visual Studio Ultimate, můžete spouštět testy automaticky po každém sestavení.Spustit test výsledky jsou zřejmé ihned/vyloučení panelu v horní části okna aplikace explorer.Podrobnosti metody výsledkem zkoušky jsou zobrazeny po výběru testu.
Rychlé úvody
Úvod k testování, přejdete přímo do kódování naleznete v těchto tématech:
Postupy: Vytváření a spouštění testování částí pro spravovaný kód
Rychlý začátek: Vývoj řízený testováním s použitím Průzkumníka testů
Příklad řešení MyBank
V tomto tématu používáme rozvoj fiktivní aplikace s názvem MyBank jako příklad.Nepotřebujete skutečný kód postupovat podle vysvětlení v tomto tématu.Zkušební metody jsou napsané v jazyce C# a předložený rámci testování Microsoft jednotky pomocí spravovaného kódu, však jsou pojmy snadno přenést do jiných jazyků a rámce.
Náš první pokus v návrhu pro MyBank aplikace obsahuje komponentu účty, která představuje jednotlivých účtů a transakce s bankou a součástí databáze, která představuje funkce slučovat a spravovat jednotlivé účty.
Doporučujeme vytvořit MyBank roztoku, který obsahuje dva projekty:
Accounts
BankDb
Náš první pokus v návrhu Accounts projekt obsahovat základní informace o účtu, rozhraní, které určuje běžné funkce libovolného typu účtu, například uložení a odnětí majetku z účtu, třídy a třídy odvozené z rozhraní reprezentující šekový účet.Začneme vytvořením následující zdrojové soubory projektů účty:
AccountInfo.csdefinuje základní informace o účtu.
IAccount.csdefinuje standard IAccountrozhraní pro účet, včetně metod vkladu a odstoupit od účet aktiv a načíst zůstatek účtu.
CheckingAccount.csobsahuje CheckingAccount třídy, která implementuje IAccounts rozhraní pro šekový účet.
Víme, zkušenosti z tohoto jednoho věcí, kterou musí provést stažení z běžného účtu je stažené množství je menší než zůstatek účtu.Takže můžeme přepsat IAccount.Withdaw metoda v CheckingAccount metodou kontroly tohoto stavu.Metoda může vypadat například takto:
public void Withdraw(double amount)
{
if(m_balance >= amount)
{
m_balance -= amount;
}
else
{
throw new ArgumentException(amount, "Withdrawal exceeds balance!")
}
}
Nyní, máme nějaký kód, je čas pro testování.
Vytváření projektů test jednotky
Zkušební projekt Jednotka obvykle odráží strukturu projektu jeden kód.V příkladu MyBank přidat dva projekty test jednotky s názvem AccountsTests a BankDbTests se MyBanks řešení.Názvy zkušebního projektu jsou libovolného, ale přijímá standardní konvence je vhodné.
Přidání roztoku zkušebního projektu jednotka:
Na soubor nabídce zvolte Nový a pak zvolte projektu (klávesnice Ctrl + Shift + N).
V dialogovém okně Nový projekt Rozbalit nainstalovat uzel, zvolte jazyk, který chcete použít zkušebního projektu a pak zvolte Test.
Použití jednoho rámce test Microsoft jednotka vyberte Testovat projekt Jednotka ze seznamu šablon projektů.Jinak zvolte šablonu projektu jednotky test rámec, který chcete použít.Test Accounts projektu našeho příkladu by název projektu AccountsTests.
Upozornění Všechny rámce test jednotek výrobců a otevřít zdroj stanovit šablonu projektu aplikace Visual Studio.Informace o vytvoření projektu naleznete v rámci dokumentu.
Zkušební projekt Jednotka přidáte odkaz na projekt kódu zkoušeného v našem příkladu účty projektu.
Chcete-li vytvořit odkaz na projekt kódu:
Vyberte projekt nasazení v okně Průzkumník řešení.
Na projektu nabídce zvolte Přidat odkaz na.
V dialogovém okně Správce odkaz otevřít roztok uzlu a zvolte projekty.Vyberte kód název projektu a zavřete dialogové okno.
Každý zkušební projekt Jednotka obsahuje třídy, které názvy tříd v projektu kód zrcadlit.V našem příkladu AccountsTests projektu bude obsahovat následující třídy:
AccountInfoTestsTřída obsahuje jednotka zkušební metody AccountInfo třídy v BankAccount projektu
CheckingAccountTestsTřída obsahuje jednotka zkušební metody pro CheckingAccount třídy.
Psaní testů
Test jednotky rámec, který používáte a Visual Studio IntelliSense vás procesem vytvoření jednotky testy pro projekt kódu.Spustit Test Explorer, většina rámce vyžadují specifické atributy identifikovat jednotku zkušební metody přidání.Rámcích také umožňují – obvykle prostřednictvím vyhodnocení příkazy nebo metody atributy – označte, zda zkušební metody nebo.Ostatní atributy identifikovat volitelné nastavení metod, které jsou při inicializaci třídy a před každou zkušební metody a rušením metody, které jsou spouštěny po každé zkušební metody a třídy zničen.
Vzorek AAA (Assert uspořádat Act) je běžný způsob zápisu jednotky zkoušky podle zkušební metody.
Uspořádat části jednotky zkušební metoda inicializuje objekty a nastaví hodnotu dat, který je předán metodě zkoušeného.
Act části vyvolá metodu zkoušeného s parametry uspořádány.
Výrazu části ověří akce podle zkušební metody chová správně.
Test CheckingAccount.Withdraw metoda našeho příkladu jsme napsat dva testy: jeden, který ověřuje standardní chování metody a jeden, který ověří, že více než zůstatek odnětí se nezdaří.V CheckingAccountTests třídy, můžeme přidat následující metody:
[TestMethod]
public void Withdraw_ValidAmount_ChangesBalance()
{
// arrange
double currentBalance = 10.0;
double withdrawal = 1.0;
double expected = 9.0;
var account = new CheckingAccount("JohnDoe", currentBalance);
// act
account.Withdraw(withdrawal);
double actual = account.Balance;
// assert
Assert.AreEqual(expected, actual);
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void Withdraw_AmountMoreThanBalance_Throws()
{
// arrange
var account = new CheckingAccount("John Doe", 10.0);
// act
account.Withdraw(1.0);
// assert is handled by the ExcpectedException
}
Všimněte si, že Withdraw_ValidAmount_ChangesBalance používá explicitní Assert prohlášení, zda zkušební metoda předá nebo selže, zatímco Withdraw_AmountMoreThanBalance_Throws používá ExpectedException atribut úspěchu zkušební metody pro určení.V části desky testovacímu systému jednotky obtéká zkušebních metod do příkazů try/catch.Ve většině případů Pokud je výjimka zachycena, nezdaří zkušební metody a výjimka bude ignorována.ExpectedException Atribut způsobuje zkušební metody předat Pokud zadaná výjimka.
Další informace o rámcích testování Microsoft jednotky naleznete v následujících tématech:
Spuštění testů v aplikaci Explorer Test
Při vytváření projektu test, se zobrazí v Průzkumníku zkušební testy.Pokud Test Explorer nezobrazuje, zvolte Test zvolte v nabídce aplikace Visual Studio Windowsa pak zvolte Test Explorer.
Spouštění, zápis a znovu spustit testy výchozí zobrazení Test Explorer zobrazuje výsledky skupin Testů se nezdařilo, Předán zkoušky, Vynechány zkoušky a Nelze spustit testy.Můžete záhlaví skupiny otevřít zobrazení, které zobrazí všechny testy v dané skupině.
Systémem a zkoušky z panelu nástrojů Průzkumníka Test zobrazení
Panel nástrojů Zkouška Explorer pomáhá zjistit, uspořádání a spustit testy, které vás zajímají.
Můžete zvolit Spustit všechny spustit všechny testy nebo zvolte Spustit vybrat podmnožinu zkoušek.Po spuštění sada testů se zobrazí souhrn zkoušky v dolní části okna Průzkumník Test.Test zobrazení podrobností tohoto testu v dolním podokně vyberte.Zvolte Open Test z kontextové nabídky (klávesnice: F12) zobrazit zdrojový kód pro vybrané zkušební.
Spuštění testů po každém sestavení
Upozornění |
---|
Jednotka spuštěné testy po každé sestavení je podporován pouze v aplikaci Visual Studio Ultimate. |
Zvolte spustit testy jednotky po každé místní sestavení, Test standardní nabídce zvolte Spustit testy po sestavení na panelu nástrojů Zkouška Explorer. |
Filtrování a seskupení seznamu test
Pokud máte velký počet zkoušek, můžete zadat pole Hledat aplikace Explorer Test na seznam filtrovat podle zadaného řetězce.Můžete omezit výběrem ze seznamu filtrů další události filtru.
Zvolte skupinu testů podle kategorie, Group tlačítko. |
Další informace získáte v tématu Provedení testů jednotky s Test Explorer
Ladění zkoušky jednotky
Test Explorer lze spustit relaci ladění pro testy.Krokování kódu jazyka Visual Studio debugger s plynule vás tam a zpět zkoušky jednotky a projektu zkoušeného.Spuštění ladění:
V editoru Visual Studio nastavte zarážky v jedné nebo více zkušebních metod, které chcete ladit.
[!POZNÁMKA]
Protože zkušební metody lze spustit v libovolném pořadí, nastavte zarážky všechny zkušební metody, které chcete ladit.
V aplikaci Explorer otestovat, vyberte zkušební metody a pak zvolte Ladění vybrané testy z místní nabídky.
Další informace o debuggeru Ladění aplikace Visual Studio.
Další nástroje pro zkoušky jednotky
Generování kódu aplikace z testů
Pokud vytváříte testy před napište kód projektu, můžete generovat třídy a metody v kódu projektu technologie IntelliSense.Zkušební metoda, která volá třídy nebo metodu, kterou chcete generovat psát prohlášení a potom otevřete nabídku IntelliSense volání.Pokud je volání konstruktoru nové třídy, zvolte generovat nový typ z nabídky a postupujte podle průvodce vložit třídy v kódu projektu.Pokud je volání metody, zvolte Generovat novou metodu z nabídky technologie IntelliSense.
Generování více testů pomocí zkušebních metod na datech
[!POZNÁMKA]
Tyto postupy platí pouze pro zkušební metody, které pomocí Microsoft testovacímu systému jednotky pro spravovaný kód.Pokud používáte jiný rámec, v dokumentaci rámec pro ekvivalentní funkce.
Řízené zkušební metody umožňují ověřit rozsah hodnot v jedné jednotky zkušební metody.Vytvořit datové jednotky zkušební metody, vyplnění metoda s DataSource atribut, který určuje zdroj dat a tabulky, která obsahuje hodnoty proměnných, které chcete testovat.V těle metody přiřadíte řádku hodnoty proměnné pomocí TestContext.DataRow[Název_sloupce] indexovací člen.
Předpokládejme například, přidáme zbytečné metody CheckingAccount třídu s názvem AddIntegerHelper.AddIntegerHelperpřidá dvě celá čísla.
Vytvořit datové test AddIntegerHelper metodu, doporučujeme nejprve vytvořit databázi aplikace Access s názvem AccountsTest.accdb a tabulku s názvem AddIntegerHelperData.AddIntegerHelperData Definuje tabulky sloupce zadejte první a druhé operandy doplnění a sloupci zadat očekávaný výsledek.Jsme počet řádků vyplnit příslušné hodnoty.
[DataSource(
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Projects\MyBank\TestData\AccountsTest.accdb",
"AddIntegerHelperData"
)]
[TestMethod()]
public void AddIntegerHelper_DataDrivenValues_AllShouldPass()
{
var target = new CheckingAccount();
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]);
int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
int actual = target.AddIntegerHelper(x, y);
Assert.AreEqual(expected, actual);
}
Přidělené metodu spustí jednou pro každý řádek v tabulce.Test Explorer hlásí chybu testu pro metodu pokud selžou všechny iterací.Podokno Podrobnosti výsledky testu pro metodu zobrazuje stav metoda/vyloučení pro každý řádek dat.
Další informace získáte v tématu Postupy: Testování částí řízené daty
Analýza jednotky testovací kód disponibility
[!POZNÁMKA]
Průchod kódem test jednotky je k dispozici pro spravované a nativním jazyce a všechny rámce test jednotky, spouštěné rámcem Test jednotky.
Můžete určit množství kód produktu, který je skutečně testovány podle testů jednotky pomocí nástroje Průchod kódem Visual Studio.Průchod kódem lze spustit testy vybrané nebo všechny testy v roztoku.Okno Kód disponibility výsledků zobrazuje procento bloků kódu produktu, které je vykonávána v řádku, funkce třídy, obor názvů a modul.
Spustit kód disponibility pro zkušební metody řešení
Zvolte zkoušky nabídce Visual Studio a pak zvolte analyzovat kód disponibility.
Zvolte jednu z následujících příkazů:
Vybrané testy spustí zkušební metody, které jste vybrali v aplikaci Explorer otestujte.
Všechny testy spustí zkušební metody řešení.
Pokrytí výsledky se zobrazí v okně Kód disponibility výsledky.
Další informace naleznete v tématu Je právě testován pomocí kódu disponibility zjistit, jak daleko kódu.
Izolace zkušebních metod jednotky s předstírá Microsoft
[!POZNÁMKA]
Předstírá Microsoft je k dispozici pouze v aplikaci Visual Studio Ultimate.Předstírá Microsoft lze použít pouze s zkušební metody, které pomocí rámce test jednotky pro spravovaný kód.
Problém
Jednotka zkušební metody, které se zaměřují na ověření vnitřní kód funkce může být obtížné psát po metodu podle testu volání funkcí, které představují vnější závislosti.Například metody CheckingAccount příklad třídy by pravděpodobně volání BankDb komponenty aktualizovat hlavní databáze.Můžete refactor jsme CheckingAccount třídy vyhledejte například následující:
class CheckingAccount : IAccount
{
public CheckingAccount(customerName, double startingBalance, IBankDb bankDb)
{
m_bankDb = bankDb;
// set up account
}
public void Withdraw(double amount)
{
if(m_balance >= amount)
{
m_balance = m_MyBankDb.Withdraw(m_accountInfo.ID, amount);
}
else
{
throw new ArgumentException(amount, "Withdrawal exceeds balance!")
}
}
private IBankDb m_bankDb = null;
// ...
Zkoušky jednotky tohoto CheckingAccount.Withdraw metody lze nyní nezdaří z důvodu problémů způsobených volání m_bankDb.Withdraw.Databáze nebo síťové připojení, mohou být ztracena nebo oprávnění k databázi je pravděpodobně chybný.Selhání v m_bankDB.Withdraw volání způsobilo test nezdaří z důvodů, které nesouvisí s jeho vnitřní kód.
Řešení Microsoft předstírá
Předstírá Microsoft vytvoří sestavení, která obsahuje třídy a metody, které můžete dosadit tříd v jednotce zkušební metody, které způsobují závislosti.Náhradní třídy v modulu generované předstírá deklaruje metodu a delegovat na jednotlivé metody veřejné cílové součásti.Zkušební metoda implementujete delegát vytvořit přesné chování závislost volání metody, kterou chcete testovat.
V našem příkladu vytvoříme předstírá sestavení pro BankDb projektu a potom StubIBankDb je generován předstírá a který je odvozen od třídy IBankDb rozhraní odebrat neurčitost způsobenou interakcí s databází.Upravené verzi Withdraw_ValidAmount_ChangesBalance zkušební metoda by měl vypadat takto:
[TestMethod]
public void Withdraw_ValidAmount_ChangesBalance()
{
// arrange
double currentBalance = 10.0;
double withdrawal = 1.0;
double expected = 9.0;
// set up the Fakes object and delegate
var stubBankDb = new MyBank.Stubs.StubIBankDb();
stubBankDb.WithdrawDoubleDouble = (id, amount) => { return 9.0; }
var account = new CheckingAccount("JohnDoe", currentBalance, stubBankDb);
// act
account.Withdraw(withdrawal);
double actual = account.Balance;
// assert
Assert.AreEqual(expected, actual);
}
Tento řádek zkušební metoda:
stubBankDb.WithdrawDoubleDouble = (id, amount) => { return 9.0; }
implementuje delegování předstírá, Withdraw metoda pomocí výrazu lamba.stubBankDb.Withdraw Metoda volá delegáta a tak vždy vrátí na zadaný počet umožňuje spolehlivě ověřit chování zkušební metody Accounts metoda.
Další informace o Microsoft předstírá
Předstírá Microsoft používá dva přístupy k vytváření náhradní tříd:
Objekty stub generovat náhradní třídy odvozené z rozhraní nadřazené třídy závislost cíl.Virtuální metody veřejné cílové třídy mohou nahradit metody se zakázaným inzerováním.
Překryvné ovladače pomocí služby WMI runtime přesměrovat volání metody cílové náhradní způsob překrytí-virtuální metody.
V obou přístupů generovaných Delegáti volání metody závislost pomocí chování, které chcete zadat do zkušební metody.
Další informace naleznete v tématu Izolace testovaného kódu pomocí zástupného rozhraní Microsoft.