Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu se dozvíte, jak sestavit řešení obsahující projekt testování jednotek a projekt knihovny. Pokud chcete postupovat podle kurzu pomocí předem připraveného řešení, zobrazte nebo stáhněte ukázkový kód. Pokyny ke stažení najdete ve vzorech a návodech .
Vytvoření řešení
V této části se vytvoří řešení, které obsahuje zdrojové a testovací projekty. Dokončené řešení má následující adresářovou strukturu:
/unit-testing-using-dotnet-test
unit-testing-using-dotnet-test.sln
/PrimeService
PrimeService.vb
PrimeService.vbproj
/PrimeService.Tests
PrimeService_IsPrimeShould.vb
PrimeServiceTests.vbproj
Následující pokyny obsahují postup vytvoření testovacího řešení. Pokyny k vytvoření testovacího řešení najdete v tématu Příkazy pro vytvoření testovacího řešení v jednom kroku.
Otevřete okno příkazového řádku.
Spusťte následující příkaz:
dotnet new sln -o unit-testing-using-dotnet-testPříkaz
dotnet new slnvytvoří nové řešení v adresáři unit-testing-using-dotnet-test .Změňte adresář na složku unit-testing-using-dotnet-test .
Spusťte následující příkaz:
dotnet new classlib -o PrimeService -lang VBPříkaz
dotnet new classlibvytvoří nový projekt knihovny tříd ve složce PrimeService . Nová knihovna tříd bude obsahovat kód, který se má testovat.Přejmenujte Class1.vb na PrimeService.vb.
Nahraďte kód v PrimeService.vb následujícím kódem:
Imports System Namespace Prime.Services Public Class PrimeService Public Function IsPrime(candidate As Integer) As Boolean Throw New NotImplementedException("Not implemented.") End Function End Class End NamespacePředchozí kód:
- Vyvolá NotImplementedException s hlášením, že není implementováno.
- Aktualizuje se později v tomto tutoriálu.
V adresáři unit-testing-using-dotnet-test spusťte následující příkaz, který do řešení přidá projekt knihovny tříd:
dotnet sln add ./PrimeService/PrimeService.vbprojSpuštěním následujícího příkazu vytvořte projekt PrimeService.Tests :
dotnet new xunit -o PrimeService.Tests -lang VBPředchozí příkaz:
- Vytvoří projekt PrimeService.Tests v adresáři PrimeService.Tests . Testovací projekt používá jako testovací knihovnu xUnit .
- Nakonfiguruje spouštěč testů přidáním následujících
<PackageReference />prvků do souboru projektu:- Microsoft.NET.Test.Sdk
- "xunit"
- xunit.runner.visualstudio
Spuštěním následujícího příkazu přidejte testovací projekt do souboru řešení:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbprojPřidejte knihovnu
PrimeServicetříd jako závislost do projektu PrimeService.Tests :dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
Příkazy pro vytvoření řešení
Tato část shrnuje všechny příkazy v předchozí části. Pokud jste dokončili kroky v předchozí části, přeskočte tuto část.
Následující příkazy vytvoří testovací řešení na počítači s Windows. Pro macOS a Unix aktualizujte ren příkaz na verzi operačního ren systému, aby se soubor přejmenoval:
dotnet new sln -o unit-testing-using-dotnet-test
cd unit-testing-using-dotnet-test
dotnet new classlib -o PrimeService
ren .\PrimeService\Class1.vb PrimeService.vb
dotnet sln add ./PrimeService/PrimeService.vbproj
dotnet new xunit -o PrimeService.Tests -lang VB
dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Postupujte podle pokynů k nahrazení kódu v PrimeService.vb následujícím kódem v předchozí části.
Vytvoření testu
Oblíbeným přístupem při vývoji řízeném testy (TDD) je napsat test před implementací cílového kódu. V tomto kurzu se používá přístup TDD. Metodu IsPrime lze volat, ale není implementována. Testovací volání na IsPrime selže. U TDD se napíše test, o kterém se ví, že selže. Cílový kód se aktualizuje, aby byl test úspěšný. Tento přístup opakujete, napíšete neúspěšný test a pak aktualizujete cílový kód tak, aby prošel.
Aktualizujte projekt PrimeService.Tests :
- Odstraňte PrimeService.Tests/UnitTest1.vb.
- Vytvořte soubor PrimeService.Tests/PrimeService_IsPrimeShould.vb .
- Nahraďte kód v PrimeService_IsPrimeShould.vb následujícím kódem:
Imports Xunit
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService
Public Sub New()
_primeService = New Prime.Services.PrimeService()
End Sub
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
End Class
End Namespace
Atribut [Fact] deklaruje testovací metodu, kterou spouští spouštěč testů. Ve složce PrimeService.Tests spusťte dotnet testpříkaz . Příkaz dotnet test sestaví projekty i spustí testy. Spouštěč testů xUnit obsahuje vstupní bod programu pro spuštění testů.
dotnet test spustí spouštěč testů pomocí projektu jednotkových testů.
Test selže, protože IsPrime nebyl implementován. Pomocí přístupu TDD napište pouze dostatečný kód, aby tento test projde. Aktualizujte IsPrime následujícím kódem:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Not implemented.")
End Function
Spusťte dotnet test. Test projde.
Přidání dalších testů
Přidejte první číselné testy pro 0 a -1. Předchozí test můžete zkopírovat a změnit následující kód tak, aby používal 0 a -1:
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
Kopírování testovacího kódu, když se změní jen parametr, vede k duplikaci kódu a nafouknutí testů. Následující atributy xUnit umožňují psát sadu podobných testů:
-
[Theory]představuje sadu testů, které provádějí stejný kód, ale mají různé vstupní argumenty. -
[InlineData]atribut určuje hodnoty pro tyto vstupy.
Místo vytváření nových testů použijte předchozí atributy xUnit k vytvoření jediné teorie. Nahraďte následující kód:
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
s následujícím kódem:
<Theory>
<InlineData(-1)>
<InlineData(0)>
<InlineData(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(ByVal value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.False(result, $"{value} should not be prime")
End Sub
V předchozím kódu [Theory] a [InlineData] umožňují testování několika hodnot menších než dvě. Dvě jsou nejmenším primárním číslem.
Spusťte dotnet test, dva testy neuspějí. Pokud chcete, aby všechny testy prošly, aktualizujte metodu IsPrime následujícím kódem:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate < 2 Then
Return False
End If
Throw New NotImplementedException("Not fully implemented.")
End Function
Podle přístupu TDD přidejte další neúspěšné testy a pak aktualizujte cílový kód. Podívejte se na dokončenou verzi testů a kompletní implementaci knihovny.
Dokončená IsPrime metoda není efektivní algoritmus pro testování primality.