Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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
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
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.