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.
In deze tutorial wordt u stapsgewijs begeleid bij het bouwen van een voorbeeldoplossing om concepten van unit testing te leren. Als u de zelfstudie liever volgt met behulp van een vooraf gebouwde oplossing, de voorbeeldcode bekijken of downloaden voordat u begint. Zie voorbeelden en zelfstudiesvoor downloadinstructies.
Dit artikel gaat over het testen van een .NET Core-project. Als u een ASP.NET Core-project aan het testen bent, zie Integratietests in ASP.NET Core.
- De nieuwste .NET SDK-
- Visual Studio Code-editor
- De C# DevKit
Open een shellvenster. Maak een map met de naam unit-testing-using-mstest om de oplossing te bewaren. Voer in deze nieuwe map dotnet new sln
uit om een nieuw oplossingsbestand te maken voor de klassebibliotheek en het testproject. Maak een PrimeService directory. In het volgende overzicht ziet u de map- en bestandsstructuur tot nu toe:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Maak PrimeService de huidige map en voer dotnet new classlib
uit om het bronproject te maken. Wijzig de naam van Class1.cs in PrimeService.cs. Vervang de code in het bestand door de volgende code om een mislukte implementatie van de PrimeService
-klasse te maken:
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Wijzig de directory terug naar de eenheidstest-met-mstest directory. Voer dotnet sln add
uit om het klassebibliotheekproject toe te voegen aan de oplossing:
dotnet sln add PrimeService/PrimeService.csproj
Maak de map PrimeService.Tests. Het volgende schema toont de directorystructuur:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Maak de PrimeService.Tests map de huidige map en maak een nieuw project met behulp van dotnet new mstest
. Met de nieuwe dotnet-opdracht maakt u een testproject dat MSTest als testbibliotheek gebruikt. De sjabloon configureert de testrunner in het bestand PrimeServiceTests.csproj:
<ItemGroup>
<PackageReference Include="MSTest" Version="3.2.0" />
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.1" />
</ItemGroup>
Voor het testproject zijn andere pakketten vereist om eenheidstests te maken en uit te voeren. In stap dotnet new
(de vorige stap) werden de benodigde MSTest-pakketten en hulpprogramma's toegevoegd voor het rapporteren van codedekking.
Voeg de PrimeService
-klassebibliotheek toe als een andere afhankelijkheid aan het project. Gebruik de opdracht dotnet reference add
:
dotnet reference add ../PrimeService/PrimeService.csproj
U kunt het hele bestand zien in de opslagplaats met voorbeelden op GitHub.
In het volgende overzicht ziet u de uiteindelijke indeling van de oplossing:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.csproj
Ga naar de directory unit-testing-using-mstest en voer dotnet sln add
uit:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
Schrijf een foutieve test, zorg dat deze slaagt en herhaal het proces. Verwijder UnitTest1.cs uit de map PrimeService.Tests en maak een nieuw C#-bestand met de naam PrimeService_IsPrimeShould.cs met de volgende inhoud:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestClass]
public class PrimeService_IsPrimeShould
{
private readonly PrimeService _primeService;
public PrimeService_IsPrimeShould()
{
_primeService = new PrimeService();
}
[TestMethod]
public void IsPrime_InputIs1_ReturnFalse()
{
bool result = _primeService.IsPrime(1);
Assert.IsFalse(result, "1 should not be prime");
}
}
}
Het kenmerk TestClass geeft een klasse aan die eenheidstests bevat. Het kenmerk TestMethod geeft aan dat een methode een testmethode is.
Sla dit bestand op en voer dotnet test
uit om de tests en de klassebibliotheek te bouwen en vervolgens de tests uit te voeren. De MSTest-testrunner bevat het programmainvoerpunt om uw tests uit te voeren.
dotnet test
start de test runner met het unittestproject dat u hebt gemaakt.
Uw test mislukt. U hebt de implementatie nog niet gemaakt. Zorg ervoor dat deze test slaagt door de simpelste code in de PrimeService
-klasse te schrijven die werkt.
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
Voer opnieuw uit in de map dotnet test
. Met de opdracht dotnet test
wordt een build uitgevoerd voor het PrimeService
project en vervolgens voor het PrimeService.Tests
project. Nadat beide projecten zijn gebouwd, wordt deze enkele test uitgevoerd. Het gaat voorbij.
Nu je één testronde hebt voltooid, is het tijd om er meer te schrijven. Er zijn enkele andere eenvoudige gevallen voor priemgetallen: 0, -1. U kunt nieuwe tests toevoegen met het kenmerk TestMethod, maar dat wordt snel tijdrovend. Er zijn andere MSTest-kenmerken waarmee u een suite met vergelijkbare tests kunt schrijven. Een testmethode kan dezelfde code uitvoeren, maar verschillende invoerargumenten hebben. U kunt het kenmerk DataRow gebruiken om waarden voor deze invoer op te geven.
In plaats van nieuwe tests te maken, past u deze twee kenmerken toe om één gegevensgestuurde test te maken. De gegevensgestuurde test is een methode waarmee verschillende waarden worden getest die kleiner zijn dan twee, het laagste priemnummer. Voeg een nieuwe testmethode toe in PrimeService_IsPrimeShould.cs:
[TestMethod]
[DataRow(-1)]
[DataRow(0)]
[DataRow(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
Assert.IsFalse(result, $"{value} should not be prime");
}
Voer dotnet test
uit en twee van deze tests mislukken. Om alle tests te laten slagen, moet u de if
-clausule aan het begin van de IsPrime
-methode in het PrimeService.cs-bestand wijzigen.
if (candidate < 2)
Blijf herhalen door meer tests, meer theorieën en meer code toe te voegen in de hoofdbibliotheek. U hebt de voltooide versie van de tests en de volledige implementatie van de bibliotheek.
U hebt een kleine bibliotheek en een set eenheidstests voor die bibliotheek gemaakt. U hebt de oplossing gestructureerd zodat het toevoegen van nieuwe pakketten en tests deel uitmaakt van de normale werkstroom. U hebt zich het grootste deel van uw tijd en moeite geconcentreerd op het oplossen van de doelstellingen van de toepassing.
.NET -feedback
.NET is een open source project. Selecteer een koppeling om feedback te geven: