Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.