Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här självstudien får du en interaktiv upplevelse när du skapar en exempellösning steg för steg för att lära dig enhetstestningskoncept.
Den här artikeln handlar om att testa ett .NET Core-projekt. Om du testar ett ASP.NET Core-projekt, se Integrationstester i ASP.NET Core.
Prerequisites
- .NET 10 SDK eller senare versioner.
- Valfri textredigerare eller kodredigerare.
TUnit bygger helt på Microsoft. Testing.Platform (MTP) och stöder inte VSTest. I den här självstudien används MTP-läget i dotnet test, som kräver .NET 10 SDK.
Skapa källprojektet
Öppna ett gränssnittsfönster. Skapa en katalog med namnet unit-testing-vb-tunit för att lagra lösningen. I den här nya katalogen kör du följande kommando för att skapa en ny lösningsfil för klassbiblioteket och testprojektet:
dotnet new sln
Skapa sedan en PrimeService-katalog . Följande disposition visar filstrukturen hittills:
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Gör PrimeService till den aktuella katalogen och kör följande kommando för att skapa källprojektet:
dotnet new classlib -lang VB
Byt namn på Class1.vb till PrimeService.vb. Du skapar en misslyckad implementering av klassen PrimeService:
Namespace Prime.Services
Public Class PrimeService
Public Function IsPrime(candidate As Integer) As Boolean
Throw New NotImplementedException("Please create a test first.")
End Function
End Class
End Namespace
Byt tillbaka till katalogen unit-testing-vb-tunit. Kör följande kommando för att lägga till klassbiblioteksprojektet i lösningen:
dotnet sln add ./PrimeService/PrimeService.vbproj
Skapa testprojektet
Skapa sedan katalogen PrimeService.Tests. Följande disposition visar katalogstrukturen:
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
TUnit-projektmallarna ingår inte i .NET SDK. Installera dem med följande kommando:
dotnet new install TUnit.Templates
Gör katalogen PrimeService.Tests till den aktuella katalogen och skapa ett nytt projekt med följande kommando:
dotnet new TUnit -lang VB
Note
Korta mallnamn är skiftlägeskänsliga. Använd TUnit, inte tunit.
Kommandot dotnet new skapar ett testprojekt som använder TUnit som testbibliotek. Den genererade filen PrimeService.Tests.vbproj är ett körbart projekt som refererar till TUnit paketet, som innehåller testramverket, kontrollbiblioteket och MTP-testlöparen, så att projektet inte behöver några andra testpaket.
Mallen lägger också till exempeltester. Ta bort alla .vb filer och datakatalogen från katalogen PrimeService.Tests , eftersom den här självstudien ersätter dem med egna tester.
Lägg nu till PrimeService-klassbiblioteket som ett annat beroende till projektet. Använd kommandot dotnet reference add:
dotnet reference add ../PrimeService/PrimeService.vbproj
Du har följande slutgiltiga lösningslayout:
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
Kör följande kommando i katalogen unit-testing-vb-tunit :
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Konfigurera MTP-läget för dotnet-test
Eftersom TUnit inte stöder VSTest dotnet test måste det köras i dess MTP-läge. I katalogen unit-testing-vb-tunit skapar du en global.json fil med följande innehåll:
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
Mer information finns i MTP-läge för dotnet-test.
Skapa det första testet
Du skriver ett misslyckat test, gör det godkänt och upprepar sedan processen. I katalogen PrimeService.Tests skapar du en PrimeService_IsPrimeShould.vb fil med följande kod:
Imports TUnit.Assertions
Imports TUnit.Assertions.Extensions
Imports TUnit.Core
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Public Async Function IsPrime_InputIs1_ReturnFalse() As Task
Dim result As Boolean = _primeService.IsPrime(1)
Await Assert.That(result).IsFalse()
End Function
End Class
End Namespace
Attributet <Test> anger en metod som körs av testlöparen. TUnit behöver inget attribut på klassen. TUnit-asserteringar är asynkrona, så testet är ett Async Function som returnerar en Task och inväntar Assert.That.
Visual Basic placerar koden i varje projekt under projektets rotnamnrymd, så PrimeService-klassen finns i PrimeService.Prime.Services-namnrymden. Testet refererar till det som Prime.Services.PrimeService eftersom namnet PrimeService i testprojektets namnområden refererar till ett namnområde i stället för till klassen.
Från katalogen unit-testing-vb-tunit kör dotnet test för att skapa testerna och klassbiblioteket och kör sedan testerna. TUnit-testprojektet innehåller programmets startpunkt för att köra dina tester.
dotnet test startar testprogrammet med det enhetstestprojekt som du har skapat.
Testet misslyckas. Du har inte skapat implementeringen än. Gör det här testet genom att skriva den enklaste koden i klassen PrimeService som fungerar:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Please create a test first.")
End Function
I katalogen dotnet test, kör igen. Kommandot dotnet test kör en version för PrimeService-projektet och sedan för PrimeService.Tests-projektet. Efter att båda projekten har byggts körs det enskilda testet. Det går över.
Lägga till fler funktioner
Nu när du har gjort ett testpass är det dags att skriva mer. Det finns några andra enkla fall för primtal: 0, -1. Du kan lägga till dessa fall som nya tester med attributet <Test>, men det blir snabbt omständligt. TUnit tillhandahåller <Arguments> attributet för att skapa en uppsättning tester som kör samma kod men som har olika indataargument.
I stället för att skapa nya tester använder du det här attributet för att skapa ett enda datadrivet test. Ersätt funktionen IsPrime_InputIs1_ReturnFalse med följande kod, som testar flera värden mindre än två, det lägsta primtalet:
<Test>
<Arguments(-1)>
<Arguments(0)>
<Arguments(1)>
Public Async Function IsPrime_ValuesLessThan2_ReturnFalse(value As Integer) As Task
Dim result As Boolean = _primeService.IsPrime(value)
Await Assert.That(result).IsFalse()
End Function
Kör dotnet testoch två av dessa tester misslyckas. Om du vill att alla tester ska godkännas ändrar du If -satsen i början av IsPrime metoden i PrimeService.vb-filen :
If candidate < 2 Then
Fortsätt att iterera genom att lägga till fler tester och mer kod i huvudbiblioteket.
Du har skapat ett litet bibliotek och en uppsättning enhetstester för biblioteket. Du har strukturerat lösningen så att tillägg av nya paket och tester är en del av det normala arbetsflödet. Du har koncentrerat dig mest på att lösa programmets mål.