Dela via


Generera enhetstester för fuzz-testning med hjälp av IntelliTest

IntelliTest utforskar din .NET-kod för att generera testdata och en uppsättning enhetstester. För varje -instruktion i koden genereras en testindata som kör instruktionen. En fallanalys utförs för varje villkorsstyrd gren i koden. Till exempel if instruktioner, påståenden och alla åtgärder som kan utlösa undantag analyseras. Den här analysen används för att generera testdata för ett parameteriserat enhetstest för var och en av dina metoder, vilket skapar enhetstester med hög kodtäckning. Se det som smart fuzz-testning som trimmar indata och testfall till vad som kör alla dina logikgrenar och söker efter undantag.

När du kör IntelliTest kan du enkelt se vilka tester som misslyckas och lägga till nödvändig kod för att åtgärda dem. Du kan välja vilka av de genererade testerna som ska sparas i ett testprojekt för att tillhandahålla en regressionssvit. När du ändrar din kod kör du IntelliTest igen för att hålla de genererade testerna synkroniserade med dina kodändringar.

Anmärkning

IntelliTest är inaktuellt i Visual Studio 2026. I Visual Studio 2022 stöds IntelliTest endast för .NET Framework och är begränsat till Visual Studio Enterprise. Stödet för .NET 6 begränsades endast till en förhandsversion.

Anmärkning

I Visual Studio 2022 stöds IntelliTest endast för .NET Framework och är begränsat till Visual Studio Enterprise. Stödet för .NET 6 begränsades endast till en förhandsversion.

Tillgänglighet och tillägg

Menykommandona Skapa IntelliTest och Kör IntelliTest :

  • Är endast tillgängliga i Enterprise Edition i Visual Studio.

  • Stöd endast för C#-kod som riktar sig till .NET Framework.

  • Är utökningsbara och stöder att generera tester i MSTest-, MSTest V2-, NUnit- och xUnit-format.

  • Stöd inte för x64-konfiguration (kräver förhandsversion).

Utforska: Använd IntelliTest för att utforska din kod och generera enhetstester

För att generera enhetstester måste dina typer vara offentliga.

  1. Öppna lösningen i Visual Studio och öppna sedan den klassfil som innehåller metoder som du vill testa.

  2. Högerklicka på en metod och välj Kör IntelliTest för att generera enhetstester för koden i din metod.

    Skärmbild av högerklick på en metod för att skapa enhetstester.

    Skärmbild av högerklick på en metod för att skapa enhetstester.

    IntelliTest kör koden många gånger med olika indata. I tabellen visas varje exekvering med indata och tillhörande resultat eller undantag.

    Skärmbild av fönstret Utforskningsresultat.

    Skärmbild av fönstret Utforskningsresultat.

Om du vill generera enhetstester för alla offentliga metoder i en klass högerklickar du bara i klassen i stället för på en specifik metod och väljer sedan Kör IntelliTest. Använd listrutan i fönstret Utforskningsresultat för att visa enhetstesterna och indata för varje metod i klassen.

Skärmbild av testresultat som ska visas från listan.

Skärmbild av testresultat som ska visas från listan.

För tester som godkänns kontrollerar du att de rapporterade resultaten i resultatkolumnen matchar dina förväntningar på koden. För tester som misslyckas kan du åtgärda koden efter behov. Kör sedan IntelliTest igen för att verifiera korrigeringarna.

Bibehåll: Spara enhetstesterna som en regressionssvit

  1. Välj de datarader som du vill spara med det parametriserade enhetstestet i ett testprojekt.

    Skärmbild av Spara testresultat.

    Skärmbild av Spara testresultat.

    Du kan visa testprojektet och det parametriserade enhetstest som har skapats – de enskilda enhetstesterna, som motsvarar var och en av raderna, sparas i filen .g.cs i testprojektet och ett parameteriserat enhetstest sparas i motsvarande .cs fil. Du kan köra enhetstesterna och visa resultaten från Test Explorer precis som för alla enhetstester som du skapade manuellt.

    Skärmbild av sparade tester i Solution Explorer.

    Skärmbild av sparade tester i Solution Explorer.

    Alla nödvändiga referenser läggs också till i testprojektet.

    Om metodkoden ändras kör du IntelliTest igen för att hålla enhetstesterna synkroniserade med ändringarna.

Assist: Använd IntelliTest för att fokusera på kodutforskning

  1. Om du har mer komplex kod hjälper IntelliTest dig att fokusera på att utforska din kod. Om du till exempel har en metod som har ett gränssnitt som parameter och det finns fler än en klass som implementerar gränssnittet identifierar IntelliTest dessa klasser och rapporterar en varning.

    Visa varningarna för att bestämma vad du vill göra.

    Skärmbild av Visa varningar.

    Skärmbild av Visa varningar.

  2. När du har undersökt koden och förstår vad du vill testa kan du åtgärda varningen för att välja vilka klasser som ska användas för att testa gränssnittet.

    Skärmbild av Korrigeringsvarning.

    Skärmbild av Korrigeringsvarning.

    Det här valet läggs till i filen PexAssemblyInfo.cs .

    [assembly: PexUseType(typeof(Camera))]

  3. Nu kan du köra IntelliTest igen för att generera ett parameteriserat enhetstest och testa data bara med hjälp av den klass som du har korrigerat.

    Skärmbild av Kör IntelliTest igen efter korrigering.

    Skärmbild av Kör IntelliTest igen efter korrigering.

Ange: Använd IntelliTest för att verifiera korrekthetsegenskaper som du anger i kod

Ange den allmänna relationen mellan indata och utdata som du vill att de genererade enhetstesterna ska verifiera. Den här specifikationen är inkapslad i en metod som ser ut som en testmetod men som är universellt kvantifierad. Det här är den parameteriserade enhetstestmetoden, och alla kontroller du gör måste gälla för alla möjliga indatavärden som IntelliTest kan generera.

Frågor och svar

F: Kan du använda IntelliTest för ohanterad kod?

S: Nej, IntelliTest fungerar bara med hanterad kod.

F: När godkänns eller misslyckas ett genererat test?

S: Det godkänns precis som vilket annat enhetstest om inga undantag inträffar. Det misslyckas om något påstående misslyckas, eller om koden under test utlöser ett ohanterat undantag.

Om du har ett test som kan godkännas om vissa undantag utlöses kan du ange något av följande attribut baserat på dina krav på testmetoden, testklassen eller sammansättningsnivån:

  • PexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttribute

F: Kan jag lägga till antaganden i det parametriserade enhetstestet?

S: Ja, använd antaganden för att ange vilka testdata som inte krävs för enhetstestet för en viss metod. PexAssume Använd klassen för att lägga till antaganden. Du kan till exempel lägga till ett antagande om att variabeln lengths inte är null så här:

PexAssume.IsNotNull(lengths);

Om du lägger till ett antagande och kör IntelliTest igen tas testdata som inte längre är relevanta bort.

F: Kan jag lägga till assertioner i det parametriserade enhetstestet?

S: Ja, IntelliTest kommer att kontrollera att det du hävdar i ditt uttryck faktiskt är korrekt när den kör enhetstesterna. Använd klassen PexAssert eller api:et för försäkran som medföljer testramverket för att lägga till kontroller. Du kan till exempel lägga till ett intyg om att två variabler är lika med.

PexAssert.AreEqual(a, b);

Om du lägger till en försäkran och kör IntelliTest igen kontrollerar den att din försäkran är giltig och att testet misslyckas om det inte är det.

F: Kan jag generera parametriserade enhetstester utan att köra IntelliTest först?

S: Ja, högerklicka i klassen eller metoden och välj sedan Skapa IntelliTest.

Skärmbild av Skapa IntelliTest.

Skärmbild av Skapa IntelliTest.

Acceptera standardformatet för att generera dina tester eller ändra hur projektet och testerna namnges. Du kan skapa ett nytt testprojekt eller spara dina tester i ett befintligt projekt.

Skärmbild av Create IntelliTest with MSTest default (Skapa IntelliTest med MSTest-standard).

Skärmbild av Create IntelliTest with MSTest default (Skapa IntelliTest med MSTest-standard).

F: Kan jag använda andra enhetstestramverk med IntelliTest?

S: Ja, följ de här stegen för att hitta och installera andra ramverk. Testramverkstillägg är också tillgängliga på Visual Studio Marketplace, till exempel NUnit Test Generator.

När du har startat om Visual Studio och öppnat lösningen igen högerklickar du i klassen eller metoden och väljer sedan Skapa IntelliTest. Välj ditt installerade ramverk här:

Skärmbild av Välj annat enhetstestramverk för IntelliTest.

Skärmbild av Välj annat enhetstestramverk för IntelliTest.

Kör sedan IntelliTest för att generera enskilda enhetstester i motsvarande .g.cs filer.

F: Kan jag lära mig mer om hur testerna genereras?

S: Ja, för att få en översikt på hög nivå läser du det här blogginlägget.