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


Visual Basic .NET Core-kódtárak egységtesztelése dotnet-teszt és MSTest 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, tekintse meg a ASP.NET Core integrációs tesztekrészt.

A forrásprojekt létrehozása

Nyisson meg egy terminálablakot. Hozzon létre egy unit-testing-vb-mstest nevű könyvtárat a megoldás tárolásához. Ebben az új könyvtárban futtassa a dotnet new sln új megoldás létrehozása érdekében. Ez a gyakorlat megkönnyíti az osztálytár és az egységtesztelési projekt kezelését is. A megoldáskönyvtáron belül hozzon létre egy PrimeService könyvtárat. Eddig a következő könyvtár- és fájlszerkezettel rendelkezik:

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

Állítsa az aktuális könyvtárba a PrimeService-t, és futtassa dotnet new classlib -lang VB a forrásprojekt létrehozására. 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 dotnet sln add .\PrimeService\PrimeService.vbproj parancsot az osztálykönyvtár projekt hozzáadásához a megoldásba.

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-mstest
    unit-testing-vb-mstest.sln
    /PrimeService
        Source Files
        PrimeService.vbproj
    /PrimeService.Tests

Állítsa a PrimeService.Tests könyvtárat az aktuális könyvtárra, és hozzon létre egy új projektet a dotnet new mstest -lang VBhasználatával. Ez a parancs létrehoz egy tesztprojektet, amely az MSTestet használja teszttárként. A létrehozott sablon a tesztfuttatót konfigurálja a PrimeServiceTests.vbproj-ben.

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

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 MSTestet. 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-mstest
    unit-testing-vb-mstest.sln
    /PrimeService
        Source Files
        PrimeService.vbproj
    /PrimeService.Tests
        Test Source Files
        PrimeServiceTests.vbproj

Hajtsa végre a dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj-t a unit-testing-vb-mstest könyvtárban.

Az első teszt létrehozása

Írsz egy sikertelen tesztet, sikerre viszed, majd megismétled a folyamatot. Távolítsa el UnitTest1.vb a PrimeService.Tests könyvtárból, és hozzon létre egy PrimeService_IsPrimeShould.VBnevű új Visual Basic-fájlt. Adja hozzá a következő kódot:

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

A <TestClass> attribútum egy teszteket tartalmazó osztályt jelöl. A <TestMethod> attribútum a tesztfuttató által futtatott metódust jelöli. A unit-testing-vb-mstestpontból hajtsa végre a dotnet test parancsot a tesztek és az osztálykönyvtár felépítéséhez, majd futtassa a teszteket. Az MSTest tesztfuttatója 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 hozta 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-mstest könyvtárban futtassa újra a dotnet test. 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 <TestMethod> attribútummal, de ez gyorsan fárasztóvá válik. Vannak más MSTest-attribútumok, amelyek lehetővé teszik, hogy hasonló tesztcsomagot írjon. A <DataRow> attribútumot és <TestMethod> attribútumot is használhatja a bemenetek értékeinek megadásához.

Új tesztek létrehozása helyett alkalmazza ezt a két attribútumot egyetlen elmélet létrehozásához. Az elmélet egy olyan módszer, amely több, kettőnél kisebb értéket tesztel, ami a legalacsonyabb prímszám:

<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

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 metódus elején:

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.