Generování testů jednotek pro přibližné testování pomocí IntelliTestu
IntelliTest prozkoumá váš kód .NET a vygeneruje testovací data a sadu testů jednotek. Pro každý příkaz v kódu se vygeneruje testovací vstup, který tento příkaz spustí. Analýza případů se provádí pro každou podmíněnou větev v kódu. Například if
příkazy, kontrolní výrazy a všechny operace, které mohou vyvolat výjimky, se analyzují. Tato analýza se používá ke generování testovacích dat pro parametrizovaný test jednotek pro každou z vašich metod a k vytváření testů jednotek s vysokým pokrytím kódu. Představte si ho jako inteligentní přibližné testování, které ořízne vstupy a testovací případy tak, aby prováděly všechny větve logiky a kontrolují výjimky.
Když spustíte IntelliTest, můžete snadno zjistit, které testy selhávají, a přidat potřebný kód k jejich opravě. Můžete vybrat, které z vygenerovaných testů se mají uložit do testovacího projektu a poskytnout regresní sadu. Při změně kódu znovu spusťte IntelliTest, aby se vygenerované testy synchronizovaly se změnami kódu.
Dostupnost a rozšíření
Příkazy nabídky Vytvořit IntelliTest a Spustit IntelliTest :
Jsou k dispozici pouze v edice Enterprise sady Visual Studio.
Podporuje pouze kód jazyka C#, který cílí na rozhraní .NET Framework.
Poznámka:
Pro podporu .NET 6 s IntelliTestem můžete nainstalovat verzi Preview sady Visual Studio Enterprise a zobrazit oznámení .
Jsou rozšiřitelné a podporují generování testů ve formátu MSTest, MSTest V2, NUnit a xUnit.
Nepodporuje konfiguraci x64.
Prozkoumání: Použití IntelliTestu k prozkoumání kódu a generování testů jednotek
Pokud chcete generovat testy jednotek, musí být vaše typy veřejné.
Otevřete řešení v sadě Visual Studio a otevřete soubor třídy s metodami, které chcete testovat.
Klikněte pravým tlačítkem na metodu a zvolte Spustit IntelliTest a vygenerujte testy jednotek pro kód v metodě.
IntelliTest spouští váš kód mnohokrát s různými vstupy. Každé spuštění je znázorněno v tabulce zobrazující vstupní testovací data a výsledný výstup nebo výjimku.
Chcete-li generovat testy jednotek pro všechny veřejné metody ve třídě, jednoduše klikněte pravým tlačítkem myši na třídu místo konkrétní metody a pak zvolte Spustit IntelliTest. Pomocí rozevíracího seznamu v okně Výsledky zkoumání zobrazte testy jednotek a vstupní data pro každou metodu ve třídě.
U testů, které projdou, zkontrolujte, jestli hlášené výsledky ve sloupci výsledků odpovídají vašim očekáváním pro váš kód. V případě testů, které selžou, opravte kód podle potřeby. Pak znovu spusťte IntelliTest a ověřte opravy.
Trvalé: Uložení testů jednotek jako regresní sady
Vyberte datové řádky, které chcete uložit s parametrizovaným testem jednotek do testovacího projektu.
Můžete zobrazit projekt testu a parametrizovaný test jednotek, který byl vytvořen – jednotlivé testy jednotek odpovídající jednotlivým řádkům, jsou uloženy v souboru .g.cs v testovacím projektu a parametrizovaný test jednotek se uloží do příslušného souboru .cs . Testy jednotek můžete spustit a zobrazit výsledky z Průzkumníka testů stejně jako u všech testů jednotek, které jste vytvořili ručně.
Všechny nezbytné odkazy se také přidají do testovacího projektu.
Pokud se kód metody změní, spusťte Znovu IntelliTest, aby se testy jednotek synchronizovaly se změnami.
Pomocník: Použití IntelliTestu k zaměření zkoumání kódu
Pokud máte složitější kód, IntelliTest vám pomůže se zaměřením na zkoumání kódu. Pokud máte například metodu, která má rozhraní jako parametr a existuje více než jedna třída, která implementuje toto rozhraní, IntelliTest zjistí tyto třídy a hlásí upozornění.
Podívejte se na upozornění a rozhodněte se, co chcete udělat.
Po prozkoumání kódu a pochopení toho, co chcete testovat, můžete opravit upozornění a zvolit, které třídy se mají použít k otestování rozhraní.
Tato volba se přidá do souboru PexAssemblyInfo.cs .
[assembly: PexUseType(typeof(Camera))]
Teď můžete znovu spustit IntelliTest a vygenerovat parametrizovaný test jednotek a testovat data pouze pomocí třídy, kterou jste opravili.
Zadat: Použití IntelliTestu k ověření vlastností správnosti, které zadáte v kódu
Zadejte obecný vztah mezi vstupy a výstupy, které chcete, aby se vygenerované testy jednotek ověřily. Tato specifikace je zapouzdřena v metodě, která vypadá jako testovací metoda, ale je všeobecně kvantifikována. Toto je parametrizovaná metoda testu jednotek a všechny kontrolní výrazy, které provedete, musí obsahovat všechny možné vstupní hodnoty, které IntelliTest může vygenerovat.
Otázky a odpovědi
Otázka: Můžete použít IntelliTest pro nespravovaný kód?
A: Ne, IntelliTest funguje jenom se spravovaným kódem.
Otázka: Kdy vygenerovaný test projde nebo selže?
A: Projde stejně jako jakýkoli jiný test jednotek, pokud nedojde k žádným výjimkám. Pokud některý kontrolní výraz selže nebo pokud kód pod testem vyvolá neošetřenou výjimku.
Pokud máte test, který může projít, pokud dojde k vyvolání určitých výjimek, můžete nastavit jeden z následujících atributů na základě vašich požadavků na úrovni testovací metody, třídy testu nebo sestavení:
PexAllowedExceptionAttribute
PexAllowedExceptionFromTypeAttribute
PexAllowedExceptionFromTypeUnderTestAttribute
PexAllowedExceptionFromAssemblyAttribute
Otázka: Můžu do parametrizovaného testu jednotek přidat předpoklady?
A: Ano, pomocí předpokladů určete, která testovací data nejsou vyžadována pro test jednotek pro konkrétní metodu. PexAssume Pomocí třídy přidejte předpoklady. Můžete například přidat předpoklad, že lengths
proměnná nemá hodnotu null, například takto:
PexAssume.IsNotNull(lengths);
Pokud přidáte předpoklad a znovu spustíte IntelliTest, odeberou se testovací data, která už nejsou relevantní.
Otázka: Můžu do parametrizovaného testu jednotek přidat kontrolní výrazy?
Odpověď: Ano, IntelliTest zkontroluje, že to, co v příkazu tvrdíte, je ve skutečnosti správné, když spustí testy jednotek. PexAssert K přidání kontrolních výrazů použijte třídu nebo rozhraní API kontrolního výrazu, které je součástí testovací architektury. Můžete například přidat kontrolní výraz, který se rovná dvěma proměnným.
PexAssert.AreEqual(a, b);
Pokud přidáte kontrolní výraz a znovu spustíte IntelliTest, zkontroluje, jestli je kontrolní výraz platný a test selže, pokud ne.
Otázka: Můžu vygenerovat parametrizované testy jednotek bez spuštění IntelliTestu?
A: Ano, klikněte pravým tlačítkem myši na třídu nebo metodu a pak zvolte Create IntelliTest.
Přijměte výchozí formát pro vygenerování testů nebo změňte název projektu a testů. Můžete vytvořit nový testovací projekt nebo uložit testy do existujícího projektu.
Otázka: Můžu s IntelliTestem použít jiné architektury testování jednotek?
A: Ano, pomocí těchto kroků vyhledejte a nainstalujte další architektury. Rozšíření testovací architektury jsou k dispozici také v sadě Visual Studio Marketplace, například NUnit Test Generator.
Po restartování sady Visual Studio a opětovném otevření řešení klikněte pravým tlačítkem myši na třídu nebo metodu a pak zvolte Vytvořit IntelliTest. Tady vyberte nainstalovanou architekturu:
Potom spusťte IntelliTest a vygenerujte jednotlivé testy jednotek v odpovídajících souborech .g.cs .
Otázka: Můžu se dozvědět více o tom, jak se testy generují?
Ano, pokud chcete získat základní přehled, přečtěte si tento blogový příspěvek.