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.
Tento kurz vás provede interaktivním prostředím a podrobným sestavením ukázkového řešení, kde se seznámíte s koncepty testování jednotek. Pokud chcete postupovat podle kurzu pomocí předem připraveného řešení, zobrazit nebo stáhnout ukázkový kód, než začnete. Pokyny ke stažení najdete ve vzorech a návodech .
Tento článek se týká testování projektu .NET Core. Pokud testujete projekt ASP.NET Core, přečtěte si téma Integrační testy v ASP.NET Core.
Požadavky
- .NET 8 SDK nebo novější verze
- Textový editor nebo editor kódu podle vašeho výběru.
Vytvoření zdrojového projektu
Otevřete okno příkazového řádku. Vytvořte adresář s názvem unit-testing-vb-nunit pro uložení řešení. V tomto novém adresáři spusťte následující příkaz, který vytvoří nový soubor řešení pro knihovnu tříd a testovací projekt:
dotnet new sln
Dále vytvořte adresář PrimeService. Následující osnova ukazuje zatím strukturu souborů:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Nastavte PrimeService jako aktuální adresář a poté spusťte následující příkaz pro vytvoření zdrojového projektu:
dotnet new classlib -lang VB
Přejmenujte Class1.VB na PrimeService.VB. Vytvoříte neúspěšnou implementaci třídy 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
Změňte adresář zpět na unit-testing-vb-using-mstest adresář. Spuštěním následujícího příkazu přidejte do řešení projekt knihovny tříd:
dotnet sln add .\PrimeService\PrimeService.vbproj
Vytvoření testovacího projektu
Dále vytvořte adresář PrimeService.Tests. Následující osnova ukazuje adresářovou strukturu:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Nastavte adresář PrimeService.Tests jako aktuální a vytvořte nový projekt pomocí následujícího příkazu:
dotnet new nunit -lang VB
Příkaz dotnet new vytvoří testovací projekt, který jako testovací knihovnu používá NUnit. Vygenerovaná šablona nakonfiguruje spouštěč testů v souboru PrimeServiceTests.vbproj :
<ItemGroup>
<PackageReference Include="nunit" Version="4.4.0" />
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
</ItemGroup>
Poznámka:
Před .NET 9 může vygenerovaný kód odkazovat na starší verze testovací architektury NUnit. K aktualizaci balíčků můžete použít dotnet CLI. Případně otevřete soubor PrimeService.Tests.vbproj a nahraďte obsah skupiny položek odkazů na balíčky výše uvedeným kódem.
Testovací projekt vyžaduje k vytvoření a spuštění testů jednotek další balíčky.
dotnet new v předchozím kroku jsme přidali NUnit a adaptér testu NUnit. Teď do projektu přidejte knihovnu tříd PrimeService jako jinou závislost. Použijte příkaz dotnet reference add:
dotnet reference add ../PrimeService/PrimeService.vbproj
Celý soubor můžete zobrazit v úložišti ukázek na GitHubu.
Máte následující konečné rozložení řešení:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
V adresáři unit-testing-vb-nunit spusťte následující příkaz:
dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
Vytvoření prvního testu
Napíšete jeden neúspěšný test, uděláte ho úspěšným, a pak tento proces zopakujete. V adresáři PrimeService.Tests přejmenujte soubor UnitTest1.vb na PrimeService_IsPrimeShould.VB a nahraďte celý jeho obsah následujícím kódem:
Imports NUnit.Framework
Namespace PrimeService.Tests
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.That(result, [Is].False, $"1 should not be prime")
End Sub
End Class
End Namespace
Atribut <TestFixture> označuje třídu, která obsahuje testy. Atribut <Test> označuje metodu spuštěnou spouštěčem testů. Z unit-testing-vb-nunit spusťte dotnet test pro provedení kompilace testů a knihovny tříd a potom spusťte testy. Spouštěč testů NUnit obsahuje vstupní bod programu pro spuštění testů.
dotnet test spustí spouštěč testů pomocí projektu testu jednotek, který jste vytvořili.
Váš test neuspěl. Ještě jste nevytvořili implementaci. Proveďte tento test tak, že napíšete nejjednodušší kód ve třídě PrimeService, která funguje:
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
V adresáři unit-testing-vb-nunit spusťte dotnet test znovu. Příkaz dotnet test spustí sestavení projektu PrimeService a poté projektu PrimeService.Tests. Po sestavení obou projektů spustí tento jediný test. Projde.
Přidání dalších funkcí
Nyní, když jste úspěšně prošli jedním testem, je čas napsat více testů. Existuje několik dalších jednoduchých případů pro prime čísla: 0, -1. Tyto případy můžete přidat jako nové testy s atributem <Test>, ale to se rychle stane zdlouhavým. Existují další atributy xUnit, které umožňují napsat sadu podobných testů. Atribut <TestCase> představuje sadu testů, které provádějí stejný kód, ale mají různé vstupní argumenty. Pomocí atributu <TestCase> můžete zadat hodnoty pro tyto vstupy.
Místo vytváření nových testů použijte tyto dva atributy k vytvoření řady testů, které testují několik hodnot menší než dvě, což je nejnižší základní číslo:
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestCase(-1)>
<TestCase(0)>
<TestCase(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
<TestCase(2)>
<TestCase(3)>
<TestCase(5)>
<TestCase(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].True, $"{value} should be prime")
End Sub
<TestCase(4)>
<TestCase(6)>
<TestCase(8)>
<TestCase(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
End Class
Spusťte dotnet testa dva z těchto testů selžou. Chcete-li úspěšně splnit všechny testy, změňte výraz if na začátku metody Main v souboru PrimeServices.cs:
if candidate < 2
Pokračujte iterováním přidáním dalších testů, dalších teorie a dalšího kódu v hlavní knihovně. Máte dokončenou verzi testů a kompletní implementaci knihovny.
Vytvořili jste malou knihovnu a sadu jednotkových testů pro tuto knihovnu. Řešení jste strukturovali tak, aby přidání nových balíčků a testů bylo součástí normálního pracovního postupu. Většinu času a úsilí jste se zaměřili na řešení cílů aplikace.