Delen via


Eenheidstests genereren voor fuzz-tests met behulp van IntelliTest

IntelliTest verkent uw .NET-code om testgegevens en een reeks eenheidstests te genereren. Voor elke instructie in de code wordt een testinvoer gegenereerd waarmee die instructie wordt uitgevoerd. Er wordt een caseanalyse uitgevoerd voor elke voorwaardelijke vertakking in de code. Bijvoorbeeld instructies if , asserties en alle bewerkingen die uitzonderingen kunnen genereren, worden geanalyseerd. Deze analyse wordt gebruikt om testgegevens te genereren voor een geparameteriseerde eenheidstest voor elk van uw methoden, waarbij eenheidstests met een hoge codedekking worden gemaakt. U kunt het beschouwen als slimme fuzz-tests waarmee de invoer- en testcases worden ingekort tot wat al uw logische vertakkingen uitvoert en op uitzonderingen controleert.

Wanneer u IntelliTest uitvoert, kunt u eenvoudig zien welke tests mislukken en eventuele benodigde code toevoegen om deze op te lossen. U kunt selecteren welke van de gegenereerde tests u wilt opslaan in een testproject om een regressiepakket te bieden. Wanneer u de code wijzigt, voert u IntelliTest opnieuw uit om de gegenereerde tests gesynchroniseerd te houden met uw codewijzigingen.

Opmerking

IntelliTest is verouderd verklaard in Visual Studio 2026. In Visual Studio 2022 wordt IntelliTest alleen ondersteund voor .NET Framework en is beperkt tot Visual Studio Enterprise. Ondersteuning voor .NET 6 is beperkt tot alleen een preview-versie.

Opmerking

In Visual Studio 2022 wordt IntelliTest alleen ondersteund voor .NET Framework en is beperkt tot Visual Studio Enterprise. Ondersteuning voor .NET 6 is beperkt tot alleen een preview-versie.

Beschikbaarheid en extensies

De menuopdrachten IntelliTest maken en IntelliTest uitvoeren :

  • Zijn alleen beschikbaar in de Enterprise Edition van Visual Studio.

  • Alleen C#-code ondersteunen die voor .NET Framework bestemd is.

  • uitbreidbaar en ondersteunen het uitvoeren van tests in MSTest, MSTest V2, NUnit en xUnit-indeling.

  • Geen ondersteuning voor x64-configuratie (preview-versie vereist).

Verkennen: IntelliTest gebruiken om uw code te verkennen en eenheidstests te genereren

Als u eenheidstests wilt genereren, moeten uw typen openbaar zijn.

  1. Open uw oplossing in Visual Studio en open vervolgens het klassebestand met methoden die u wilt testen.

  2. Klik met de rechtermuisknop op een methode en kies IntelliTest uitvoeren om eenheidstests voor de code in uw methode te genereren.

    Schermopname van met de rechtermuisknop op de methode klikken om eenheidstests te genereren.

    Schermopname van met de rechtermuisknop op de methode klikken om eenheidstests te genereren.

    IntelliTest voert uw code vaak uit met verschillende invoerwaarden. Elke uitvoering wordt weergegeven in de tabel met de invoertestgegevens en de resulterende uitvoer of uitzondering.

    Schermopname van het venster Verkenningsresultaten.

    Schermopname van het venster Verkenningsresultaten.

Als u eenheidstests voor alle openbare methoden in een klasse wilt genereren, klikt u met de rechtermuisknop op de klasse in plaats van op een specifieke methode en kiest u Vervolgens IntelliTest uitvoeren. Gebruik de vervolgkeuzelijst in het venster Verkenningsresultaten om de eenheidstests en de invoergegevens voor elke methode in de klasse weer te geven.

Schermopname van testresultaten om weer te geven vanuit de lijst.

Schermopname van testresultaten om weer te geven vanuit de lijst.

Controleer voor tests die zijn geslaagd of de gerapporteerde resultaten in de resultatenkolom overeenkomen met uw verwachtingen voor uw code. Voor tests die mislukken, herstelt u de code indien nodig. Voer vervolgens IntelliTest opnieuw uit om de oplossingen te valideren.

Persistent: Sla de eenheidstests op als een regressiesuite

  1. Selecteer de gegevensrijen die u wilt opslaan met de geparameteriseerde eenheidstest in een testproject.

    Schermopname van testresultaten opslaan.

    Schermopname van testresultaten opslaan.

    U kunt het testproject en de geparameteriseerde eenheidstest bekijken die is gemaakt: de afzonderlijke eenheidstests, die overeenkomen met elk van de rijen, worden opgeslagen in het .g.cs-bestand in het testproject en een geparameteriseerde eenheidstest wordt opgeslagen in het bijbehorende .cs bestand. U kunt de eenheidstests uitvoeren en de resultaten bekijken vanuit Test Explorer, net zoals voor alle eenheidstests die u handmatig hebt gemaakt.

    Schermopname van opgeslagen tests in Solution Explorer.

    Schermopname van opgeslagen tests in Solution Explorer.

    Alle benodigde verwijzingen worden ook toegevoegd aan het testproject.

    Als de methodecode wordt gewijzigd, voert u IntelliTest opnieuw uit om de eenheidstests gesynchroniseerd te houden met de wijzigingen.

Assist: IntelliTest gebruiken om codeverkenning te concentreren

  1. Als u complexere code hebt, helpt IntelliTest u bij het focussen op het verkennen van uw code. Als u bijvoorbeeld een methode hebt die een interface als parameter heeft en er meer dan één klasse is die die interface implementeert, detecteert IntelliTest deze klassen en rapporteert een waarschuwing.

    Bekijk de waarschuwingen om te bepalen wat u wilt doen.

    Schermopname van Waarschuwingen weergeven.

    Schermopname van Waarschuwingen weergeven.

  2. Nadat u de code hebt onderzocht en begrijpt wat u wilt testen, kunt u de waarschuwing herstellen om te kiezen welke klassen moeten worden gebruikt om de interface te testen.

    Schermopname van waarschuwing herstellen.

    Schermopname van waarschuwing herstellen.

    Deze keuze wordt toegevoegd aan het PexAssemblyInfo.cs-bestand .

    [assembly: PexUseType(typeof(Camera))]

  3. U kunt Nu IntelliTest opnieuw uitvoeren om een geparameteriseerde eenheidstest te genereren en gegevens te testen met behulp van de klasse die u hebt opgelost.

    Schermopname van IntelliTest opnieuw uitvoeren na een oplossing.

    Schermopname van IntelliTest opnieuw uitvoeren na een oplossing.

Specificeer: Gebruik IntelliTest om de correctheidseigenschappen te valideren die je in de code opgeeft.

Geef de algemene relatie op tussen invoer en uitvoer die door de gegenereerde eenheidstests moet worden gevalideerd. Deze specificatie wordt ingekapseld in een methode die lijkt op een testmethode, maar universeel gekwantificeerd is. Dit is de testmethode voor geparameteriseerde unit-tests en eventuele asserties die u maakt, moeten gelden voor alle mogelijke invoerwaarden die IntelliTest kan genereren.

Vragen en antwoorden

V: Kunt u IntelliTest gebruiken voor niet-beheerde code?

Een: Nee, IntelliTest werkt alleen met beheerde code.

V: Wanneer wordt een gegenereerde test geslaagd of mislukt?

A: Het slaagt net als elke andere eenheidstest als er geen uitzonderingen optreden. Het mislukt als een assertie mislukt of als de code onder de test een onverwerkte uitzondering genereert.

Als u een test hebt die kan slagen als bepaalde uitzonderingen worden gegenereerd, kunt u een van de volgende kenmerken instellen afhankelijk van uw vereisten op testmethodeniveau, testklasseniveau of assemblyniveau.

  • PexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttribute

V: Kan ik veronderstellingen toevoegen aan de geparameteriseerde eenheidstest?

Een: Ja, gebruik veronderstellingen om op te geven welke testgegevens niet vereist zijn voor de eenheidstest voor een specifieke methode. Gebruik de PexAssume klasse om aannames toe te voegen. U kunt bijvoorbeeld een aanname toevoegen dat de lengths variabele niet null is, zoals deze:

PexAssume.IsNotNull(lengths);

Als u een aanname toevoegt en IntelliTest opnieuw uitvoert, worden de testgegevens verwijderd die niet meer relevant zijn.

V: Kan ik asserties toevoegen aan de geparameteriseerde eenheidstest?

A: Ja, IntelliTest controleert of wat u in uw bewering stelt in feite juist is wanneer de unittests worden uitgevoerd. Gebruik de PexAssert klasse of de assertion-API die bij het testframework wordt geleverd om asserties toe te voegen. U kunt bijvoorbeeld een verklaring toevoegen dat twee variabelen gelijk zijn.

PexAssert.AreEqual(a, b);

Als u een assertie toevoegt en IntelliTest opnieuw uitvoert, controleert u of uw assertie geldig is en mislukt de test als dat niet zo is.

V: Kan ik geparameteriseerde eenheidstests genereren zonder eerst IntelliTest uit te voeren?

Een: Ja, klik met de rechtermuisknop in de klasse of methode en kies IntelliTest maken.

Schermopname van Create IntelliTest.

Schermopname van Create IntelliTest.

Accepteer de standaardindeling om uw tests te genereren of wijzig de naam van uw project en tests. U kunt een nieuw testproject maken of uw tests opslaan in een bestaand project.

Schermopname van IntelliTest maken met MSTest standaard.

Schermopname van IntelliTest maken met MSTest standaard.

V: Kan ik andere eenheidstestframeworks gebruiken met IntelliTest?

Een: Ja, volg deze stappen om andere frameworks te zoeken en te installeren. Testframeworkextensies zijn ook beschikbaar in Visual Studio Marketplace, bijvoorbeeld NUnit Test Generator.

Nadat u Visual Studio opnieuw hebt opgestart en de oplossing opnieuw hebt geopend, klikt u met de rechtermuisknop in de klasse of methode en kiest u Vervolgens IntelliTest maken. Selecteer hier uw geïnstalleerde framework:

Schermopname van Selecteer ander unit-testframework voor IntelliTest.

Schermopname van Selecteer ander unit-testframework voor IntelliTest.

Voer vervolgens IntelliTest uit om afzonderlijke eenheidstests te genereren in de bijbehorende .g.cs-bestanden .

V: Kan ik meer informatie krijgen over hoe de tests worden gegenereerd?

Een: Ja, lees dit blogbericht voor een overzicht op hoog niveau.