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.
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.
Prerequisites
- .NET 10 SDK vagy újabb verziók.
- Az Ön által választott szöveg- vagy kódszerkesztő.
A TUnit teljes egészében Microsoft.Testing.Platformra (MTP) épül, és nem támogatja a VSTestet. Ez az oktatóanyag a dotnet test MTP-módját használja, amelyhez a .NET 10 SDK szükséges.
A forrásprojekt létrehozása
Nyisson meg egy parancssor ablakot. Hozzon létre egy unit-testing-using-tunit 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 vázlat a könyvtárat és a fájlstruktúrát mutatja be eddig:
/unit-testing-using-tunit
unit-testing-using-tunit.slnx
/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
Nevezze át a(z) Class1.cs fájlt a következőképpen: PrimeService.cs. A PrimeService osztály sikertelen implementációját hozza létre:
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Módosítsa vissza a könyvtárat a unit-testing-using-tunit könyvtárra. Futtassa a következő parancsot az osztálytárprojekt megoldáshoz való hozzáadásához:
dotnet sln add PrimeService/PrimeService.csproj
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-using-tunit
unit-testing-using-tunit.slnx
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
A TUnit-projektsablonok nem szerepelnek a .NET SDK-ban. Telepítse őket a következő paranccsal:
dotnet new install TUnit.Templates
Módosítsa a címtárat a PrimeService.Tests könyvtárra, és hozzon létre egy új projektet az alábbi paranccsal:
dotnet new TUnit
Note
A sablon rövid nevei megkülönböztetik a kis- és nagybetűket. Használja TUnit, ne tunit.
A dotnet new parancs létrehoz egy tesztprojektet, amely a TUnitot használja tesztkönyvtárként. A létrehozott PrimeService.Tests.csproj fájl egy végrehajtható projekt, amely a TUnit csomagra hivatkozik (a verziószám eltérhet):
<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TUnit" Version="1.*" />
</ItemGroup>
A TUnit csomag tartalmazza a tesztelési keretrendszert, az assertion könyvtárat és az MTP-tesztfuttatót, így a projektnek nincs szüksége más tesztcsomagra. A sablon mintateszteket is hozzáad. Törölje az összes .cs fájlt és a Data könyvtárat a PrimeService.Tests könyvtárból, mert ez az oktatóanyag a saját tesztjeire cseréli őket.
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.csproj
Az alábbi ábra a végső megoldáselrendezést mutatja be:
/unit-testing-using-tunit
unit-testing-using-tunit.slnx
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.csproj
Hajtsa végre a következő parancsot a unit-testing-using-tunit könyvtárban:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
A dotnet-teszt MTP-módjának konfigurálása
Mivel a TUnit nem támogatja a VSTestet, dotnet test a saját MTP módjában kell futnia. A unit-testing-using-tunit könyvtárban hozzon létre egy global.json fájlt a következő tartalommal:
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
További információt a dotnet test MTP módjáról talál.
Az első teszt létrehozása
Írj egy hibás tesztet, tedd sikeressé, majd ismételd meg a folyamatot. A PrimeService.Tests könyvtárban hozzon létre egy PrimeService_IsPrimeShould.cs fájlt a következő kóddal:
namespace Prime.UnitTests.Services
{
using Prime.Services;
public class PrimeService_IsPrimeShould
{
private readonly PrimeService _primeService = new();
[Test]
public async Task IsPrime_InputIs1_ReturnFalse()
{
var result = _primeService.IsPrime(1);
await Assert.That(result).IsFalse();
}
}
}
Az [Test] attribútum azt jelzi, hogy a metódus egy tesztmetódus. A TUnitnak nincs szüksége attribútumra az osztályon. A TUnit-állítások aszinkronok, ezért a vizsgálati módszer egy Task értéket ad vissza, és megvárja a(z) Assert.That-t. A TUnit csomag globális using irányelveket ad hozzá a névtereihez, így a fájlnak nincs szüksége rájuk.
Note
Az using Prime.Services; irányelv szándékosan a névtéren belül van. Az MTP létrehozza a tesztalkalmazás belépési pontját a projekt gyökérnévterében, PrimeService.Tests. Ez a névtér elrejti az PrimeService osztályt a fájl tetején lévő using irányelv elől, de a névtéren belüli irányelv elől nem.
Mentse ezt a fájlt, és hajtsa végre a dotnet test parancsot a tesztek és az osztálytár létrehozásához és a tesztek futtatásához. A TUnit tesztprojekt tartalmazza a tesztek futtatásához a program belépési pontját.
dotnet test elindítja a tesztalkalmazást a létrehozott egységteszt-projekt használatával.
A teszt sikertelen. Még nem hozta létre az implementációt. Tedd sikeressé a tesztet azzal, hogy írj egy olyan legegyszerűbb kódot a PrimeService osztályban, ami működik:
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
A unit-testing-using-tunit könyvtárban futtassa dotnet test újra. A dotnet test parancs egy buildet futtat a PrimeService projekthez, majd a PrimeService.Tests projekthez. Mindkét projekt létrehozása után az egyetlen tesztet futtatja. Átmegy.
További funkciók hozzáadása
Most, hogy lefuttattál egy tesztet, ideje többet írni. A prímszámoknak van még néhány egyszerű esete: 0, -1. Hozzáadhat új teszteket a [Test] attribútummal, de ez gyorsan válhat unalmassá. A TUnit egy olyan tesztcsomag létrehozásához adja meg az [Arguments] attribútumot, amely ugyanazt a kódot különböző bemeneti argumentumokkal hajtja végre.
Új tesztek létrehozása helyett alkalmazza ezt az attribútumot egyetlen adatvezérelt teszt létrehozásához. Cserélje le a metódust IsPrime_InputIs1_ReturnFalse a következő kódra. Az adatvezérelt teszt egy olyan módszer, amely több, kettőnél kisebb értéket tesztel, ami a legalacsonyabb prímszám:
[Test]
[Arguments(-1)]
[Arguments(0)]
[Arguments(1)]
public async Task IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
await Assert.That(result).IsFalse();
}
Futtassa dotnet test, és a tesztek közül kettő elbukik. Az összes teszt sikeres elvégzéséhez módosítsa a if záradékot a IsPrime metódus elején a PrimeService.cs fájlban:
if (candidate < 2)
Folytassa az iterációt úgy, hogy további teszteket és kódot ad hozzá a fő kódtárban.
Ön épített egy kis könyvtárat és egy egységtesztkészletet a könyvtárhoz. A megoldást úgy is strukturálta, hogy az új csomagok és tesztek hozzáadása a szokásos munkafolyamat része legyen. A legtöbb időt és erőfeszítést az alkalmazás céljainak megoldására összpontosította.