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.
Vereiste voorwaarden
- De nieuwste .NET SDK-
- Visual Studio Code-editor
- De C# DevKit
Het bronproject maken
Open een shellvenster. Maak een map met de naam unit-testing-using-nunit- om de oplossing te bewaren. Voer in deze nieuwe map de volgende opdracht uit om een nieuw oplossingsbestand voor de klassebibliotheek en het testproject te maken:
dotnet new sln
Maak vervolgens een PrimeService-directory. In het volgende overzicht ziet u de map- en bestandsstructuur tot nu toe:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Maak PrimeService de huidige map en voer de volgende opdracht uit om het bronproject te maken:
dotnet new classlib
Wijzig de naam van Class1.cs in PrimeService.cs. U maakt een mislukte implementatie van de PrimeService
-klasse:
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 unit-testing-using-nunit map. Voer de volgende opdracht uit om het klassebibliotheekproject toe te voegen aan de oplossing:
dotnet sln add PrimeService/PrimeService.csproj
Het testproject maken
Maak vervolgens de map PrimeService.Tests. Het volgende schema toont de directorystructuur:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Maak de PrimeService.Tests map de huidige map en maak een nieuw project met behulp van de volgende opdracht:
dotnet new nunit
Met de opdracht dotnet new maakt u een testproject dat NUnit als testbibliotheek gebruikt. De gegenereerde sjabloon configureert de testrunner in het bestand PrimeService.Tests.csproj:
<ItemGroup>
<PackageReference Include="nunit" Version="4.3.2" />
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="NUnit.Analyzers" Version="4.9.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
Notitie
Vóór .NET 9 kan de gegenereerde code verwijzen naar oudere versies van het NUnit-testframework. U kunt dotnet CLI- gebruiken om de pakketten bij te werken. U kunt ook het bestand PrimeService.Tests.csproj openen en de inhoud van de pakketverwijzingenitemgroep vervangen door de bovenstaande code.
Voor het testproject zijn andere pakketten vereist om eenheidstests te maken en uit te voeren. De dotnet new
opdracht in de vorige stap heeft de Microsoft Test SDK, het testframework NUnit en de NUnit-testadapter toegevoegd. Voeg nu de PrimeService
klassebibliotheek toe als een andere afhankelijkheid van 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-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.csproj
Voer de volgende opdracht uit in de map unit-testing-using-nunit:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
De eerste test maken
U schrijft één falende test, laat deze slagen, en herhaalt het proces. Wijzig in de map PrimeService.Tests de naam van het UnitTest1.cs bestand in PrimeService_IsPrimeShould.cs en vervang de volledige inhoud door de volgende code:
using NUnit.Framework;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestFixture]
public class PrimeService_IsPrimeShould
{
private PrimeService _primeService;
[SetUp]
public void SetUp()
{
_primeService = new PrimeService();
}
[Test]
public void IsPrime_InputIs1_ReturnFalse()
{
var result = _primeService.IsPrime(1);
Assert.That(result, Is.False, "1 should not be prime");
}
}
}
Het kenmerk [TestFixture]
geeft een klasse aan die eenheidstests bevat. Het kenmerk [Test]
geeft aan dat een methode een testmethode is.
Sla dit bestand op en voer de opdracht dotnet test
uit om de tests en de klassebibliotheek te bouwen en de tests uit te voeren. De NUnit-testloper bevat het ingangspunt van het programma 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 de test wordt doorgegeven door de eenvoudigste 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 in de directory unit-testing-using-nunitdotnet test
opnieuw uit. Met de opdracht dotnet test
wordt een build uitgevoerd voor het PrimeService
project en vervolgens voor het PrimeService.Tests
project. Nadat u beide projecten hebt gebouwd, wordt deze enkele test uitgevoerd. Het gaat voorbij.
Meer functies toevoegen
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 [Test]
, maar dat wordt snel tijdrovend. Er zijn andere NUnit-kenmerken waarmee u een suite met vergelijkbare tests kunt schrijven. Een [TestCase]
kenmerk wordt gebruikt om een reeks tests te maken die dezelfde code uitvoeren, maar verschillende invoerargumenten hebben. U kunt het kenmerk [TestCase]
gebruiken om waarden voor deze invoer op te geven.
In plaats van nieuwe tests te maken, past u dit kenmerk toe om één gegevensgestuurde test te maken. De gegevensgestuurde test is een methode waarmee verschillende waarden worden getest die kleiner zijn dan twee, wat het laagste priemnummer is:
[TestCase(-1)]
[TestCase(0)]
[TestCase(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService?.IsPrime(value);
Assert.That(result, Is.False, $"{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 Main
-methode in het PrimeService.cs-bestand wijzigen.
if (candidate < 2)
Blijf herhalen door meer tests, theorieën en 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 ook gestructureerd, zodat het toevoegen van nieuwe pakketten en tests deel uitmaakt van de standaardwerkstroom. U hebt zich het grootste deel van uw tijd en moeite geconcentreerd op het oplossen van de doelstellingen van de toepassing.