Megosztás a következőn keresztül:


Visual Basic .NET Core-kódtárak egységtesztelése dotnet-teszt és NUnit használatával

Ez az oktatóanyag egy interaktív felületen mutatja be, hogyan hozhat létre lépésről lépésre egy mintamegoldást az egységtesztelési fogalmak megismeréséhez. Ha inkább egy előre elkészített megoldással szeretné követni az oktatóanyagot, a kezdés előtt megtekintheti vagy letöltheti a mintakódot. A letöltési utasításokért tekintse meg példákat és oktatóanyagokat.

Ez a cikk egy .NET Core-projekt teszteléséről szól. Ha egy ASP.NET Core-projektet tesztel, olvassa el az ASP.NET Core Integrációs tesztekfejezetet.

Előfeltételek

  • .NET 8 SDK vagy újabb verziók.
  • Az Ön által választott szöveg- vagy kódszerkesztő.

A forrásprojekt létrehozása

Nyisson meg egy parancssor ablakot. Hozzon létre egy unit-testing-vb-nunit nevű könyvtárat a megoldás tárolásához. Az új könyvtárban futtassa a következő parancsot egy új megoldásfájl létrehozásához az osztálytárhoz és a tesztprojekthez:

dotnet new sln

Ezután hozzon létre egy PrimeService könyvtárat. Az alábbi ábra az eddigi fájlstruktúrát mutatja be:

/unit-testing-vb-nunit
    unit-testing-vb-nunit.sln
    /PrimeService

Állítsa be a PrimeService-et aktuális könyvtárként, és futtassa a következő parancsot a forrásprojekt létrehozásához:

dotnet new classlib -lang VB

Nevezze át a(z) Class1.VB elemet PrimeService.VBnévre. A PrimeService osztály sikertelen implementációját hozza létre:

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

Változtassa vissza a könyvtárat a unit-testing-vb-using-mstest könyvtárra. Futtassa a következő parancsot az osztálytárprojekt megoldáshoz való hozzáadásához:

dotnet sln add .\PrimeService\PrimeService.vbproj

A tesztprojekt létrehozása

Ezután hozza létre a PrimeService.Tests könyvtárat. Az alábbi ábra a könyvtárszerkezetet mutatja be:

/unit-testing-vb-nunit
    unit-testing-vb-nunit.sln
    /PrimeService
        Source Files
        PrimeService.vbproj
    /PrimeService.Tests

Állítsa a PrimeService.Tests könyvtárat aktuális munkakönyvtárnak az alábbi parancs segítségével, és hozzon létre egy új projektet:

dotnet new nunit -lang VB

A dotnet new parancs egy tesztprojektet hoz létre, amely az NUnitot használja tesztelési könyvtárként. A létrehozott sablon konfigurálja a tesztfuttatót a PrimeServiceTests.vbproj fájlban:

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

Megjegyzés:

A .NET 9 előtt a létrehozott kód hivatkozhat az NUnit-teszt keretrendszer régebbi verzióira. A csomagok frissítéséhez használhatja dotnet CLI. Másik lehetőségként nyissa meg a PrimeService.Tests.vbproj fájlt, és cserélje le a csomaghivatkozások elemcsoportjának tartalmát a fenti kódra.

A tesztprojekthez más csomagokra van szükség az egységtesztek létrehozásához és futtatásához. dotnet new az előző lépésben hozzáadta az NUnit és az NUnit tesztadaptert. Most adja hozzá a PrimeService osztálytárat egy másik függőségként a projekthez. Használja a dotnet reference add parancsot:

dotnet reference add ../PrimeService/PrimeService.vbproj

A teljes fájl a GitHub mintaadattárában látható.

A következő végső megoldáselrendezést kell követnie:

/unit-testing-vb-nunit
    unit-testing-vb-nunit.sln
    /PrimeService
        Source Files
        PrimeService.vbproj
    /PrimeService.Tests
        Test Source Files
        PrimeService.Tests.vbproj

Hajtsa végre a következő parancsot a unit-testing-vb-nunit könyvtárban:

dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj

Az első teszt létrehozása

Írsz egy sikertelen tesztet, sikerre viszed, majd megismétled a folyamatot. A PrimeService.Tests könyvtárban nevezze át a UnitTest1.vb fájlt PrimeService_IsPrimeShould.VB , és cserélje le a teljes tartalmát a következő kódra:

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

A <TestFixture> attribútum egy teszteket tartalmazó osztályt jelöl. A <Test> attribútum a tesztfuttató által futtatott metódust jelöli. A unit-testing-vb-nunit fájlból hajtsa végre dotnet test a teszteket és az osztálytárat, majd futtassa a teszteket. Az NUnit-tesztfuttató tartalmazza a tesztek futtatásához a program belépési pontját. dotnet test elindítja a tesztfuttatót a létrehozott egységteszt-projekt használatával.

A teszt sikertelen. Még nem hoztad létre az implementációt. Ezt a tesztet úgy teheti meg, hogy a legegyszerűbb kódot írja be a PrimeService osztályba, amely működik:

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

A unit-testing-vb-nunit könyvtárban futtassa újra a dotnet test-t. A dotnet test parancs egy buildet futtat a PrimeService projekthez, majd a PrimeService.Tests projekthez. Mindkét projekt létrehozása után ezt az egyetlen tesztet futtatja. Átmegy.

További funkciók hozzáadása

Most, hogy teljesített egy teszteredményt, ideje többet írni. A prímszámoknak van még néhány egyszerű esete: 0, -1. Ezeket az eseteket új tesztként is hozzáadhatja a <Test> attribútummal, de ez gyorsan fárasztóvá válik. Vannak más xUnit-attribútumok is, amelyek lehetővé teszik, hogy hasonló tesztcsomagot írjon. Az <TestCase> attribútum olyan tesztcsomagot jelöl, amely ugyanazt a kódot hajtja végre, de különböző bemeneti argumentumokkal rendelkezik. Az attribútummal <TestCase> megadhat értékeket ezekhez a bemenetekhez.

Új tesztek létrehozása helyett alkalmazza ezt a két attribútumot egy olyan tesztsorozat létrehozására, amelyek több, kettőnél kisebb értéket tesztelnek, ami a legalacsonyabb prímszám:

<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

Futtassa dotnet test, és a tesztek közül kettő elbukik. Az összes teszt sikeressé tétele érdekében módosítsa a if záradékot a Main metódus elején a PrimeServices.cs fájlban:

if candidate < 2

Folytassa az iterációt úgy, hogy további teszteket, több elméletet és további kódot ad hozzá a fő kódtárhoz. Önnek van a tesztek befejezett verziója és a könyvtárteljes implementálása .

Létrehozott egy kis könyvtárat és egy készletnyi egységtesztet a könyvtárhoz. A megoldást úgy strukturálta, hogy az új csomagok és tesztek hozzáadása a normál munkafolyamat része legyen. A legtöbb időt és erőfeszítést az alkalmazás céljainak megoldására összpontosította.