Visual Basic .NET Core-kódtárak egységtesztelése dotnet-teszt és xUnit használatával
Ez az oktatóanyag bemutatja, hogyan hozhat létre egy egységtesztprojektet és kódtárprojektet tartalmazó megoldást. Ha előre elkészített megoldással szeretné követni az oktatóanyagot, tekintse meg vagy töltse le a mintakódot. A letöltési utasításokért tekintse meg a példákat és az oktatóanyagokat.
A megoldás létrehozása
Ebben a szakaszban létrejön egy megoldás, amely tartalmazza a forrás- és tesztprojekteket. A kész megoldás a következő könyvtárstruktúrával rendelkezik:
/unit-testing-using-dotnet-test
unit-testing-using-dotnet-test.sln
/PrimeService
PrimeService.vb
PrimeService.vbproj
/PrimeService.Tests
PrimeService_IsPrimeShould.vb
PrimeServiceTests.vbproj
Az alábbi utasítások a tesztmegoldás létrehozásának lépéseit ismertetik. A tesztelési megoldás egy lépésben történő létrehozásához szükséges utasításokért tekintse meg a parancsokat.
Nyisson meg egy felületablakot.
Futtassa az alábbi parancsot:
dotnet new sln -o unit-testing-using-dotnet-test
A
dotnet new sln
parancs létrehoz egy új megoldást a unit-testing-using-dotnet-test könyvtárban.Módosítsa a könyvtárat a unit-testing-using-dotnet-test mappára.
Futtassa az alábbi parancsot:
dotnet new classlib -o PrimeService --lang VB
A
dotnet new classlib
parancs létrehoz egy új osztálytárprojektet a PrimeService mappában. Az új osztálykódtár tartalmazza a tesztelni kívánt kódot.Nevezze át Class1.vb PrimeService.vb.
Cserélje le a PrimeService.vb kódját a következő kódra:
Imports System Namespace Prime.Services Public Class PrimeService Public Function IsPrime(candidate As Integer) As Boolean Throw New NotImplementedException("Not implemented.") End Function End Class End Namespace
A fenti kód a következőket végzi el:
- NotImplementedException Egy üzenetet küld, amely jelzi, hogy nincs implementálva.
- Az oktatóanyag későbbi részében frissül.
A unit-testing-using-dotnet-test könyvtárban futtassa a következő parancsot az osztálytár projektjének a megoldáshoz való hozzáadásához:
dotnet sln add ./PrimeService/PrimeService.vbproj
Hozza létre a PrimeService.Tests projektet a következő parancs futtatásával:
dotnet new xunit -o PrimeService.Tests
A fenti parancs a következőket hajtja végre:
- Létrehozza a PrimeService.Tests projektet a PrimeService.Tests könyvtárban. A tesztprojekt az xUnitot használja teszttárként.
- A tesztfuttatót úgy konfigurálja, hogy hozzáadja a következő
<PackageReference />
elemeket a projektfájlhoz:- "Microsoft.NET.Test.Sdk"
- "xunit"
- "xunit.runner.visualstudio"
Adja hozzá a tesztprojektet a megoldásfájlhoz az alábbi parancs futtatásával:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Adja hozzá az
PrimeService
osztálytárat függőségként a PrimeService.Tests projekthez:dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
A megoldás létrehozásához használt parancsok
Ez a szakasz az előző szakasz összes parancsát összegzi. Kihagyhatja ezt a szakaszt, ha elvégezte az előző szakasz lépéseit.
Az alábbi parancsok létrehozzák a tesztmegoldást egy Windows-gépen. MacOS és Unix esetén frissítse a parancsot a ren
fájl átnevezésének operációs rendszerének ren
verziójára:
dotnet new sln -o unit-testing-using-dotnet-test
cd unit-testing-using-dotnet-test
dotnet new classlib -o PrimeService
ren .\PrimeService\Class1.vb PrimeService.vb
dotnet sln add ./PrimeService/PrimeService.vbproj
dotnet new xunit -o PrimeService.Tests
dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Kövesse az előző szakaszban található "A PrimeService.vb kódjának cseréje a következő kódra" című szakasz utasításait.
Teszt létrehozása
A tesztalapú fejlesztés (TDD) egyik népszerű módszere a teszt írása a célkód implementálása előtt. Ez az oktatóanyag a TDD-megközelítést használja. A IsPrime
metódus hívható, de nem implementálható. Sikertelen teszthívás IsPrime
. A TDD-vel a rendszer olyan tesztet ír, amelyről ismert, hogy sikertelen. A célkód frissül, hogy a teszt sikeres legyen. Ismételje meg ezt a megközelítést, írjon egy sikertelen tesztet, majd frissítse a célkódot az átadásra.
Frissítse a PrimeService.Tests projektet:
- Törölje a PrimeService.Tests/UnitTest1.vb.
- Hozzon létre egy PrimeService.Tests/PrimeService_IsPrimeShould.vb fájlt.
- Cserélje le a PrimeService_IsPrimeShould.vb kódját a következő kódra:
Imports Xunit
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService
Public Sub New()
_primeService = New Prime.Services.PrimeService()
End Sub
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
End Class
End Namespace
Az [Fact]
attribútum deklarál egy tesztmetódust, amelyet a tesztfuttató futtat. Futtassa dotnet test
a PrimeService.Tests mappát. A dotnet test parancs mindkét projektet létrehozza, és futtatja a teszteket. Az xUnit tesztfuttató tartalmazza a tesztek futtatásához a program belépési pontát. dotnet test
elindítja a tesztfuttatót az egységteszt-projekt használatával.
A teszt meghiúsul, mert IsPrime
még nincs implementálva. A TDD-módszer használatával csak annyi kódot írjon, hogy a teszt sikeres legyen. Frissítsen IsPrime
a következő kóddal:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Not implemented.")
End Function
Futtassa az dotnet test
parancsot. A teszt sikeres.
További tesztek hozzáadása
Adjon hozzá prímszámteszteket a 0 és a -1 számhoz. Másolhatja az előző tesztet, és módosíthatja a következő kódot a 0 és a -1 használatára:
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
A tesztkód másolása, ha csak egy paraméter változása eredményez kódismétlést és tesztblobot. A következő xUnit-attribútumok lehetővé teszik egy hasonló tesztcsomag írását:
[Theory]
olyan tesztcsomagot jelöl, amely ugyanazt a kódot hajtja végre, de különböző bemeneti argumentumokkal rendelkezik.[InlineData]
attribútum a bemenetek értékeit határozza meg.
Új tesztek létrehozása helyett alkalmazza az előző xUnit-attribútumokat egyetlen elmélet létrehozására. Cserélje le a következő kódot:
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
a következő kóddal:
<Theory>
<InlineData(-1)>
<InlineData(0)>
<InlineData(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(ByVal value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.False(result, $"{value} should not be prime")
End Sub
Az előző kódban engedélyezze [Theory]
[InlineData]
a kétnál kisebb értékek tesztelését. A kettő a legkisebb prímszám.
Futtassa dotnet test
a két teszt sikertelen voltát. Az összes teszt sikeres végrehajtásához frissítse a metódust IsPrime
a következő kóddal:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate < 2 Then
Return False
End If
Throw New NotImplementedException("Not fully implemented.")
End Function
A TDD-megközelítést követve adjon hozzá további sikertelen teszteket, majd frissítse a célkódot. Tekintse meg a tesztek kész verzióját és a kódtár teljes implementációját.
A kész IsPrime
módszer nem hatékony algoritmus az elsődlegesség teszteléséhez.
További erőforrások
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: