Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Controleer of uw code werkt zoals verwacht door eenheidstests te maken en uit te voeren. Dit wordt eenheidstests genoemd omdat u de functionaliteit van uw programma opsplitst in discrete testbare gedragingen die u als afzonderlijke eenheden kunt testen. Visual Studio Test Explorer biedt een flexibele en efficiënte manier om uw eenheidstests uit te voeren en hun resultaten weer te geven in Visual Studio. Visual Studio installeert de Microsoft Unit Testing Frameworks voor beheerde en systeemeigen code. Gebruik een eenheidstestframework om eenheidstests te maken, uit te voeren en de resultaten van deze tests te rapporteren. Voer eenheidstests opnieuw uit wanneer u wijzigingen aanbrengt om te testen of uw code nog steeds correct werkt. Visual Studio Enterprise kan dit automatisch doen met Live Unit Testing, waarmee tests worden gedetecteerd die worden beïnvloed door uw codewijzigingen en deze op de achtergrond worden uitgevoerd terwijl u typt.
Het testen van eenheden heeft het grootste effect op de kwaliteit van uw code wanneer het een integraal onderdeel is van uw werkstroom voor softwareontwikkeling. Zodra u een functie of een ander blok toepassingscode schrijft, maakt u eenheidstests die het gedrag van de code controleren als reactie op standaard-, grens- en onjuiste gevallen van invoergegevens en die expliciete of impliciete veronderstellingen controleren die door de code worden gemaakt. Met testgestuurde ontwikkeling maakt u de eenheidstests voordat u de code schrijft, dus u gebruikt de eenheidstests als ontwerpdocumentatie en functionele specificaties.
Test Explorer kan ook testframeworks van derden en opensource-eenheden uitvoeren die test explorer-invoegtoepassingsinterfaces hebben geïmplementeerd. U kunt veel van deze frameworks toevoegen via Visual Studio Extension Manager en de Visual Studio-galerie. Zie Testframeworks van derden installerenvoor meer informatie.
Get started
Zie een van de volgende artikelen voor een inleiding tot eenheidstests waarmee u rechtstreeks codeert:
Voorbeeld van bankoplossing
In dit artikel gebruiken we de ontwikkeling van een fictieve toepassing die wordt aangeroepen MyBank als voorbeeld. U hebt de daadwerkelijke code niet nodig om de uitleg in dit artikel te volgen. Testmethoden worden geschreven in C# en gepresenteerd met behulp van het Microsoft Unit Testing Framework voor Beheerde code. De concepten worden echter eenvoudig overgebracht naar andere talen en frameworks.
Onze eerste poging om een ontwerp voor de MyBank toepassing uit te voeren, bevat een accountonderdeel dat een afzonderlijke rekening en de transacties met de bank vertegenwoordigt, en een databaseonderdeel dat de functionaliteit vertegenwoordigt voor het aggregeren en beheren van de afzonderlijke accounts.
We maken een Bank oplossing die twee projecten bevat:
AccountsBankDB
Onze eerste poging om het Accounts project te ontwerpen bevat een klasse voor het opslaan van basisinformatie over een account, een interface die de algemene functionaliteit van elk type account aangeeft, zoals het storten en intrekken van activa van het account, en een klasse die is afgeleid van de interface die een controleaccount vertegenwoordigt. We beginnen met de accountsprojecten door de volgende bronbestanden te maken:
AccountInfo.cs definieert de basisinformatie voor een account.
IAccount.cs definieert een standaardinterface
IAccountvoor een account, met inbegrip van methoden voor het storten en intrekken van activa van een rekening en het ophalen van het rekeningsaldo.CheckingAccount.cs bevat de
CheckingAccountklasse waarmee deIAccountinterface voor een controleaccount wordt geïmplementeerd.
We weten uit ervaring dat een uittreding van een betaalrekening moet gebeuren om ervoor te zorgen dat het ingetrokken bedrag kleiner is dan het rekeningsaldo. We overschrijven de IAccount.Withdraw methode dus met CheckingAccount een methode die controleert op deze voorwaarde. De methode kan er als volgt uitzien:
public void Withdraw(double amount)
{
if(m_balance >= amount)
{
m_balance -= amount;
}
else
{
throw new ArgumentException(nameof(amount), "Withdrawal exceeds balance!");
}
}
Nu we wat code hebben, is het tijd om te testen.
Eenheidstests maken met Copilot
Vanaf de Build van Visual Studio 2026 Insiders kunt u GitHub Copilot-tests voor .NET gebruiken om automatisch eenheidstests te genereren. GitHub Copilot-tests voor .NET genereren niet alleen de tests, maar fouten opsporen in de tests en worden uitgevoerd in Test Explorer. Zie Overzicht van GitHub Copilot-tests voor .NET voor meer informatie. Dit is de aanbevolen methode voor het genereren van tests.
U kunt ook de Copilot-slashopdracht /tests gebruiken om unittests te genereren op basis van code. U kunt bijvoorbeeld typen /tests using NUnit Framework om NUnit-tests te genereren. Zie Slash-opdrachten gebruiken in Copilot Chat voor meer informatie.
Eenheidstests genereren en uitvoeren
Met behulp van de Build van Visual Studio 2026 Insiders kunt u GitHub Copilot-tests voor .NET gebruiken om automatisch eenheidstests te genereren.
De meeste procedures die in dit artikel worden beschreven, zijn van toepassing op handmatig gegenereerde tests. Als u meer gedetailleerde informatie wilt over eenheidstests, kunt u de rest van dit artikel lezen of doorgaan naar de sectie Tests uitvoeren in Test Explorer.
Eenheidstests maken met Copilot
U kunt de copilot-slash-opdracht /tests gebruiken om eenheidstests te genereren op basis van code. U kunt bijvoorbeeld typen /tests using NUnit Framework om NUnit-tests te genereren. Zie Slash-opdrachten gebruiken in Copilot Chat voor meer informatie.
Eenheidstestprojecten en testmethoden maken (C#)
Voor C# is het vaak sneller om het eenheidstestproject en de eenheidstest-stubs te genereren op basis van uw code. U kunt er ook voor kiezen om het eenheidstestproject en de tests handmatig te maken, afhankelijk van uw vereisten. Als u eenheidstests wilt maken op basis van code met een framework van derden, hebt u een van deze extensies geïnstalleerd: NUnit of xUnit. Als u geen C# gebruikt, slaat u deze sectie over en gaat u naar Het eenheidstestproject en de eenheidstests handmatig maken.
Eenheidstestproject en eenheidstest-stubs genereren
Klik in het venster van de code-editor met de rechtermuisknop en kies Eenheidstests maken in het snelmenu.
Opmerking
De menuopdracht Moduletests maken is alleen beschikbaar voor C#-code. Als u deze methode wilt gebruiken met .NET Core of .NET Standard, is Visual Studio 2019 of hoger vereist.
Selecteer OK om de standaardwaarden voor het maken van eenheidstests te accepteren of wijzig de waarden die worden gebruikt om het eenheidstestproject en de eenheidstests te maken en een naam te geven. U kunt de code selecteren die standaard wordt toegevoegd aan de eenheidstestmethoden.
De unit-teststubs worden gemaakt in een nieuw unit-testproject voor alle methoden van de klasse.
Ga nu verder om te leren hoe u uw tests schrijft om uw eenheidstest zinvol te maken en eventuele extra eenheidstests die u mogelijk wilt toevoegen om uw code grondig te testen.
Het eenheidstestproject en de eenheidstests handmatig maken
Een eenheidstestproject weerspiegelt meestal de structuur van één codeproject. In het voorbeeld van MyBank voegt u twee eenheidstestprojecten toe met de naam AccountsTests en BankDbTests aan de Bank oplossing. De namen van het testproject zijn willekeurig, maar het aannemen van een standaardnaamconventie is een goed idee.
Een eenheidstestproject toevoegen aan een oplossing:
Klik in Solution Explorer met de rechtermuisknop op de oplossing en kiesNieuw>toevoegen.
Typ de test in het zoekvak voor projectsjablonen om een projectsjabloon voor een eenheidstest te vinden voor het testframework dat u wilt gebruiken. (In de voorbeelden in dit artikel gebruiken we MSTest.)
Geef het project een naam op de volgende pagina. Als u het
Accountsproject van ons voorbeeld wilt testen, kunt u het projectAccountsTestseen naam geven.Voeg in uw eenheidstestproject een verwijzing toe naar het codeproject dat wordt getest, in ons voorbeeld aan het project Accounts.
De verwijzing naar het codeproject maken:
Klik in het eenheidstestproject in Solution Explorer met de rechtermuisknop op het knooppunt Verwijzingen of Afhankelijkheden en kies Vervolgens Projectverwijzing toevoegen of Verwijzing toevoegen, afhankelijk van wat beschikbaar is.
Open in het dialoogvenster Referentiebeheer het knooppunt Oplossing en kies Projecten. Selecteer de naam van het codeproject en sluit het dialoogvenster.
Elk eenheidstestproject bevat klassen die de namen van de klassen in het codeproject weerspiegelen. In ons voorbeeld bevat het AccountsTests project de volgende klassen:
AccountInfoTestsklasse bevat de eenheidstestmethoden voor deAccountInfoklasse in hetAccountsprojectCheckingAccountTestsklasse bevat de eenheidstestmethoden voorCheckingAccountklasse.
Uw tests schrijven
Het eenheidstestframework dat u gebruikt en Visual Studio IntelliSense begeleidt u bij het schrijven van de code voor uw eenheidstests voor een codeproject. Voor uitvoering in Test Explorer is voor de meeste frameworks vereist dat u specifieke kenmerken toevoegt om eenheidstestmethoden te identificeren. De frameworks bieden ook een manier, meestal via assertinstructies of methodekenmerken, om aan te geven of de testmethode is geslaagd of mislukt. Andere kenmerken identificeren optionele installatiemethoden die zich bij klasse-initialisatie bevinden en vóór elke testmethode en teardownmethoden die na elke testmethode worden uitgevoerd en voordat de klasse wordt vernietigd.
Het AAA-patroon (Arrange, Act, Assert) is een veelgebruikte manier om eenheidstests te schrijven voor een methode die wordt getest.
De sectie Rangschikken van een eenheidstestmethode initialiseert objecten en stelt de waarde in van de gegevens die worden doorgegeven aan de methode onder test.
De sectie Act roept de methode aan die wordt getest met de gerangschikte parameters.
In de sectie Assert wordt gecontroleerd of de actie van de methode onder test werkt zoals verwacht. Voor .NET worden methoden in de Assert klasse vaak gebruikt voor verificatie.
Om de CheckingAccount.Withdraw methode van ons voorbeeld te testen, kunnen we twee tests schrijven: een test die het standaardgedrag van de methode verifieert en een test die verifieert dat een intrekking van meer dan het saldo mislukt (in de volgende code wordt een MSTest-eenheidstest weergegeven, die wordt ondersteund in .NET.). In de CheckingAccountTests klasse voegen we de volgende methoden toe:
[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);
// assert
Assert.AreEqual(expected, account.Balance);
}
[TestMethod]
public void Withdraw_AmountMoreThanBalance_Throws()
{
// arrange
var account = new CheckingAccount("John Doe", 10.0);
// act and assert
Assert.ThrowsException<System.ArgumentException>(() => account.Withdraw(20.0));
}
Zie een van de volgende artikelen voor meer informatie over de Microsoft-frameworks voor eenheidstests:
Time-outs instellen voor eenheidstests
Als u het MSTest-framework gebruikt, kunt u een TimeoutAttribute time-out instellen voor een afzonderlijke testmethode:
[TestMethod]
[Timeout(2000)] // Milliseconds
public void My_Test()
{ ...
}
De time-out instellen op het toegestane maximum:
[TestMethod]
[Timeout(TestTimeout.Infinite)] // Milliseconds
public void My_Test ()
{ ...
}
Tests uitvoeren in Test Explorer
Wanneer u het testproject bouwt, worden de tests weergegeven in Test Explorer. Als Test Explorer niet zichtbaar is, kiest u Testen in het menu van Visual Studio, kiest u Windows en kiest u Test Explorer (of drukt u op Ctrl + E, T).
Terwijl u uw tests uitvoert, schrijft en opnieuw uitvoert, kan De Test Explorer de resultaten weergeven in groepen mislukte tests, geslaagde tests, overgeslagen tests en niet-uitgevoerde tests. U kunt verschillende opties voor groeperen kiezen op de werkbalk.
U kunt de tests in elke weergave ook filteren door tekst in het zoekvak op globaal niveau te vergelijken of door een van de vooraf gedefinieerde filters te selecteren. U kunt elke selectie van de tests op elk gewenst moment uitvoeren. De resultaten van een testuitvoering zijn direct zichtbaar in de pass/fail-balk boven aan het verkennervenster. Details van een testmethoderesultaat worden weergegeven wanneer u de test selecteert.
Tests uitvoeren en weergeven
Met de werkbalk Test Explorer kunt u de tests ontdekken, organiseren en uitvoeren waarin u geïnteresseerd bent.
U kunt Alles uitvoeren kiezen om al uw tests uit te voeren (of druk op Ctrl + R, V) of Kies Uitvoeren om een subset van tests te kiezen die u wilt uitvoeren (Ctrl + R, T). Selecteer een test om de details van die test weer te geven in het detailvenster van de test. Kies Test openen in het snelmenu (Toetsenbord: F12) om de broncode voor de geselecteerde test weer te geven.
Als afzonderlijke tests geen afhankelijkheden hebben die verhinderen dat ze in een willekeurige volgorde worden uitgevoerd, schakelt u parallelle testuitvoering in in het instellingenmenu van de werkbalk. Dit kan de tijd die nodig is om alle tests uit te voeren aanzienlijk verkorten.
Tests uitvoeren na elke build
Als u uw eenheidstests na elke lokale build wilt uitvoeren, opent u het instellingenpictogram op de werkbalk Test Explorer en selecteert u Tests uitvoeren na build.
De testlijst filteren en groeperen
Wanneer u een groot aantal tests hebt, kunt u in het zoekvak van Test Explorer typen om de lijst te filteren op de opgegeven tekenreeks. U kunt de filter gebeurtenis meer beperken door een keuze te maken in de filterlijst.
| Knop | Description |
|---|---|
|
Als u uw tests per categorie wilt groeperen, kiest u de knop Groeperen op . |
Zie Eenheidstests uitvoeren met Test Explorer voor meer informatie.
Vragen en Antwoorden
V: Hoe kan ik fouten opsporen in eenheidstests?
A: Gebruik Test Explorer om een debugsessie voor uw tests te starten. Door uw code te doorlopen met het Visual Studio-foutopsporingsprogramma, gaat u naadloos heen en weer tussen de eenheidstests en het project dat wordt getest. Om te beginnen met foutopsporing:
Stel in de Visual Studio-editor een onderbrekingspunt in op een of meer testmethoden die u wilt opsporen.
Opmerking
Omdat testmethoden in elke volgorde kunnen worden uitgevoerd, stelt u onderbrekingspunten in alle testmethoden in die u wilt opsporen.
Selecteer in Test Explorer de testmethoden en kies vervolgens Debug Selected Tests in het snelmenu.
Meer informatie over debuggen van unittests.
V: Als ik TDD gebruik, hoe genereer ik code op basis van mijn tests?
Een: Gebruik Snelle acties om klassen en methoden in uw projectcode te genereren. Schrijf een instructie in een testmethode die de klasse of methode aanroept die u wilt genereren en open vervolgens de gloeilamp die onder de fout wordt weergegeven. Als de aanroep naar een constructor van de nieuwe klasse is, kiest u Type genereren in het menu en volgt u de wizard om de klasse in uw codeproject in te voegen. Als de aanroep naar een methode is, kiest u De methode Genereren in het Menu IntelliSense.
V: Kan ik eenheidstests maken die meerdere gegevenssets als invoer gebruiken om de test uit te voeren?
A: Ja.
Met gegevensgestuurde testmethoden kunt u een bereik van waarden testen met één eenheidstestmethode. Gebruik een DataRowDynamicData of DataSource kenmerk voor de testmethode waarmee de gegevensbron wordt opgegeven die de variabelewaarden bevat die u wilt testen.
De toegewezen methode wordt eenmaal uitgevoerd voor elke rij in de gegevensbron. Test Explorer rapporteert een testfout voor de methode als een van de iteraties mislukt. In het detailvenster met testresultaten voor de methode ziet u de statusmethode voor geslaagd/mislukken voor elke rij met gegevens.
Meer informatie over gegevensgestuurde eenheidstests.
V: Kan ik zien hoeveel van mijn code is getest door mijn eenheidstests?
A: Ja. U kunt de hoeveelheid code bepalen die daadwerkelijk door uw eenheidstests wordt getest met behulp van het visual Studio Code-dekkingsprogramma in Visual Studio. Systeemeigen en beheerde talen en alle eenheidstestframeworks die door het Unit Test Framework kunnen worden uitgevoerd, worden ondersteund.
A: Ja. U kunt de hoeveelheid code bepalen die daadwerkelijk door uw eenheidstests wordt getest met behulp van het visual Studio Code-dekkingsprogramma in Visual Studio Enterprise. Systeemeigen en beheerde talen en alle eenheidstestframeworks die door het Unit Test Framework kunnen worden uitgevoerd, worden ondersteund.
U kunt codedekking uitvoeren op geselecteerde tests of op alle tests in een oplossing. In het venster Resultaten van codedekking wordt het percentage weergegeven van de blokken productcode die zijn uitgevoerd per regel, functie, klasse, naamruimte en module.
Als u codedekking wilt uitvoeren voor testmethoden in een oplossing, kiest u Test>Code Coverage Analyseren voor Alle Tests.
De resultaten van de dekking worden weergegeven in het venster Resultaten van codedekking .
Meer informatie over codedekking.
V: Kan ik methoden testen in mijn code met externe afhankelijkheden?
A: Ja. Als u Visual Studio Enterprise hebt, kan Microsoft Fakes worden gebruikt met testmethoden die u schrijft met behulp van eenheidstestframeworks voor beheerde code.
Microsoft Fakes gebruikt twee benaderingen om vervangingsklassen te maken voor externe afhankelijkheden:
Stubs genereren vervangende klassen die zijn afgeleid van de bovenliggende interface van de doelafhankelijkheidsklasse. Stub-methoden kunnen worden vervangen door openbare virtuele methoden van de doelklasse.
Shims gebruiken runtime-instrumentatie om aanroepen naar een doelmethode om te leiden naar een vervangende shim-methode voor niet-virtuele methoden.
In beide benaderingen gebruikt u de gegenereerde afgevaardigden van aanroepen naar de afhankelijkheidsmethode om het gewenste gedrag in de testmethode te specificeren.
Meer informatie over het isoleren van eenheidstests met Microsoft Fakes.
V: Kan ik andere eenheidstestframeworks gebruiken om eenheidstests te maken?
Een: Ja, volg deze stappen om andere frameworks te zoeken en te installeren. Nadat u Visual Studio opnieuw hebt gestart, opent u de oplossing opnieuw om uw eenheidstests te maken en selecteert u vervolgens de geïnstalleerde frameworks hier:
Uw eenheidstest-stubs worden gemaakt met behulp van het geselecteerde framework.
V: Hoe kan ik mijn eenheidstestresultaten exporteren?
Een: U kunt een .runsettings-bestand gebruiken met de opdrachtregel of de Visual Studio IDE om eenheidstests te configureren en het testresultatenbestand in te stellen. Zie het element LoggerRunSettings voor meer informatie.