Testování částí knihoven .NET Core jazyka Visual Basic pomocí testu dotnet a MSTest
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.
Vytvoření zdrojového projektu
Otevřete okno příkazového řádku. Vytvořte adresář s názvem unit-testing-vb-mstest pro uložení řešení.
V tomto novém adresáři spusťte dotnet new sln
a vytvořte nové řešení. Tento postup usnadňuje správu knihovny tříd i projektu testování jednotek.
V adresáři řešení vytvořte adresář PrimeService. Zatím máte následující adresář a strukturu souborů:
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Nastavte PrimeService jako aktuální adresář a spuštěním dotnet new classlib -lang VB
vytvořte zdrojový projekt. 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 dotnet sln add .\PrimeService\PrimeService.vbproj
přidejte do řešení projekt knihovny tříd.
Vytvoření testovacího projektu
Dále vytvořte adresář PrimeService.Tests. Následující osnova ukazuje adresářovou strukturu:
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Nastavte adresář PrimeService.Tests jako aktuální a vytvořte nový projekt pomocí dotnet new mstest -lang VB
. Tento příkaz vytvoří testovací projekt, který jako testovací knihovnu používá MSTest. Vygenerovaná šablona nakonfiguruje spouštěč testů v PrimeServiceTests.vbproj:
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</ItemGroup>
Testovací projekt vyžaduje k vytvoření a spuštění testů jednotek další balíčky.
dotnet new
v předchozím kroku přidali MSTest a MSTest runner. Teď do projektu přidejte knihovnu tříd PrimeService
jako jinou závislost. Použijte příkaz dotnet add reference
:
dotnet add reference ../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-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.vbproj
Spusťte dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
v adresáři unit-testing-vb-mstest.
Vytvoření prvního testu
Napíšete jeden neúspěšný test, uděláte ho úspěšným, a pak tento proces zopakujete. Odeberte UnitTest1.vb z adresáře PrimeService.Tests a vytvořte nový soubor jazyka Visual Basic s názvem PrimeService_IsPrimeShould.VB. Přidejte následující kód:
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Namespace PrimeService.Tests
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestMethod>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.IsFalse(result, "1 should not be prime")
End Sub
End Class
End Namespace
Atribut <TestClass>
označuje třídu, která obsahuje testy. Atribut <TestMethod>
označuje metodu spuštěnou spouštěčem testů. Z unit-testing-vb-mstestspusťte dotnet test
, sestavte testy a knihovnu tříd a pak testy spusťte. Spouštěč testů MSTest 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-mstest 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í
Teď, když jste udělali jeden test, je čas napsat více. 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 <TestMethod>
, ale to se rychle stane zdlouhavým. Existují další atributy MSTest, které umožňují napsat sadu podobných testů. Atribut <DataRow>
můžete použít spolu s atributem <TestMethod>
k určení hodnot pro tyto vstupy.
Místo vytváření nových testů použijte tyto dva atributy k vytvoření jedné teorie. Teorie je metoda, která testuje několik hodnot menší než dvě, což je nejnižší základní číslo:
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestMethod>
<DataRow(-1)>
<DataRow(0)>
<DataRow(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
<TestMethod>
<DataRow(2)>
<DataRow(3)>
<DataRow(5)>
<DataRow(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsTrue(result, $"{value} should be prime")
End Sub
<TestMethod>
<DataRow(4)>
<DataRow(6)>
<DataRow(8)>
<DataRow(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
End Class
Spusťte dotnet test
a dva z těchto testů selžou. Chcete-li provést všechny testy úspěšné, změňte klauzuli if
na začátku metody:
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.