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é.

  1. Otevřete řešení v sadě Visual Studio a otevřete soubor třídy s metodami, které chcete testovat.

  2. Klikněte pravým tlačítkem na metodu a zvolte Spustit IntelliTest a vygenerujte testy jednotek pro kód v metodě.

    Screenshot of right click on method to generate unit tests.

    Screenshot of right click on method to generate unit tests.

    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.

    Screenshot of Exploration Results window.

    Screenshot of Exploration Results window.

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ě.

Screenshot of test results to view from list.

Screenshot of test results to view from list.

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

  1. Vyberte datové řádky, které chcete uložit s parametrizovaným testem jednotek do testovacího projektu.

    Screenshot of Save test results.

    Screenshot of Save test results.

    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ě.

    Screenshot of saved tests in Solution Explorer.

    Screenshot of saved tests in Solution Explorer.

    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

  1. 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.

    Screenshot of View warnings.

    Screenshot of View warnings.

  2. 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í.

    Screenshot of Fix warning.

    Screenshot of Fix warning.

    Tato volba se přidá do souboru PexAssemblyInfo.cs .

    [assembly: PexUseType(typeof(Camera))]

  3. Teď můžete znovu spustit IntelliTest a vygenerovat parametrizovaný test jednotek a testovat data pouze pomocí třídy, kterou jste opravili.

    Screenshot of Rerun IntelliTest after fix.

    Screenshot of Rerun IntelliTest after fix.

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.

Screenshot of Create IntelliTest.

Screenshot of 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.

Screenshot of Create IntelliTest with MSTest default.

Screenshot of Create IntelliTest with MSTest default.

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:

Screenshot of Select other unit test framework for IntelliTest.

Screenshot of Select other unit test framework for IntelliTest.

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.