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í, před zahájením si prohlédněte nebo stáhněte ukázkový kód . Pokyny ke stažení najdete v tématu Ukázky a kurzy.

Tento článek se týká testování projektu .NET Core. Pokud testujete projekt ASP.NET Core, podívejte se na testy integrace v ASP.NET Core.

Vytvoření zdrojového projektu

Otevřete okno prostředí. Vytvořte adresář s názvem unit-testing-vb-mstest pro uložení řešení. V tomto novém adresáři spusťte příkaz dotnet new sln pro vytvoření nového ř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 spusťte dotnet new classlib -lang VB ho, abyste vytvořili zdrojový projekt. Přejmenujte Class1.VB na PrimeService.VB. Vytvoříte neúspěšnou implementaci PrimeService třídy:

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 adresář unit-testing-vb-using-mstest . Spuštěním příkazu dotnet sln add .\PrimeService\PrimeService.vbproj přidejte projekt knihovny tříd do řešení.

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

Vytvořte adresář PrimeService.Tests jako aktuální adresář 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 jsme přidali MSTest a MSTest runner. Teď do projektu přidejte knihovnu PrimeService tříd jako další závislost. dotnet add reference Použijte příkaz:

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, nastavíte ho jako úspěšný 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-mstest spusťte dotnet test 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 testování jednotek, který jste vytvořili.

Váš test selže. Ještě jste nevytvořili implementaci. Proveďte tento test tak, že napíšete nejjednodušší kód ve PrimeService třídě, 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 pak projekt 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 stává zdlouhavým. Existují další atributy MSTest, které umožňují napsat sadu podobných testů. Atribut <DataTestMethod> představuje sadu testů, které provádějí stejný kód, ale mají různé vstupní argumenty. Atribut můžete použít <DataRow> 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()

    <DataTestMethod>
    <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

    <DataTestMethod>
    <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

    <DataTestMethod>
    <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 testa dva z těchto testů selžou. Chcete-li provést všechny testy úspěšné, změňte if klauzuli 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 úplnou implementaci knihovny.

Vytvořili jste malou knihovnu a sadu testů jednotek 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.