Sdílet prostřednictvím


Testování částí knihoven .NET Core jazyka Visual Basic pomocí testu dotnet a NUnit

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.

Požadavky

  • Sada .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 prostředí. 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 spuštěním následujícího příkazu vytvořte zdrojový projekt:

dotnet new classlib -lang VB

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

Vytvořte adresář PrimeService.Tests jako aktuální adresář a vytvořte nový projekt pomocí následujícího příkazu:

dotnet new nunit -lang VB

Nový příkaz dotnet 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.3.2" />
  <PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
</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 rozhraní příkazového řádku dotnet. Případně otevřete soubor PrimeService.Tests.vbproj a nahraďte obsah balíčku odkazem na skupinu položek kódem výše.

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 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-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, nastavíte ho jako úspěšný 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 jednotek-testing-vb-nunit spusťte dotnet test testy a knihovnu tříd a pak testy spusťte. Spouštěč testů NUnit 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-nunit 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 <Test> , ale to se rychle stává 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. Atribut můžete použít <TestCase> k určení hodnot 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 provést všechny testy úspěšné, změňte if klauzuli na začátku Main metody 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 ú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.