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, olvassa el az ASP.NET Core Integrációs tesztekfejezetet.
Előfeltételek
- A legújabb .NET SDK
- Visual Studio Code szerkesztő
- A C# fejlesztőkészlet
A forrásprojekt létrehozása
Nyisson meg egy parancssor ablakot. Hozzon létre egy unit-testing-using-nunit nevű könyvtárat a megoldás számára. 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-nunit
unit-testing-using-nunit.sln
/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.");
}
}
}
Váltson vissza a unit-testing-using-nunit 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-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
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 nunit
A dotnet new parancs egy tesztprojektet hoz létre, amely az NUnitot használja tesztelési könyvtárként. A létrehozott sablon konfigurálja a tesztfuttatót a PrimeService.Tests.csproj fájlban.
<ItemGroup>
<PackageReference Include="nunit" Version="4.4.0" />
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
Megjegyzés
A .NET 9 előtt a létrehozott kód hivatkozhat az NUnit tesztelési keretrendszer régebbi verzióira. A dotnet CLI használatával frissítheti a csomagokat. Másik lehetőségként nyissa meg a PrimeService.Tests.csproj fájlt, és cserélje le a csomaghivatkozások elemcsoportjának tartalmát a korábban látható kódra.
A tesztprojekthez más csomagokra van szükség az egységtesztek létrehozásához és futtatásához. Az előző lépésben a dotnet new parancs hozzáadta a Microsoft test SDK-t, az NUnit tesztelési keretrendszert és az NUnit tesztadaptert. Most adja hozzá a PrimeService osztálytárat egy másik függőségként a projekthez. Használja a dotnet add reference parancsot:
dotnet add reference ../PrimeService/PrimeService.csproj
Megjegyzés
Ha .NET 10 SDK-t vagy újabb verziót használ, használhatja a "főnév első" űrlapot: dotnet reference add ../PrimeService/PrimeService.csproj.
A teljes fájl a GitHub
Az alábbi ábra a végső megoldáselrendezést mutatja be:
/unit-testing-using-nunit
unit-testing-using-nunit.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.csproj
Hajtsa végre a következő parancsot a unit-testing-using-nunit könyvtárban:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
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 nevezze át a UnitTest1.cs fájlt PrimeService_IsPrimeShould.cs névre, és cserélje le a teljes tartalmát az alábbi kódra:
using NUnit.Framework;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestFixture]
public class PrimeService_IsPrimeShould
{
private PrimeService _primeService;
[SetUp]
public void SetUp()
{
_primeService = new PrimeService();
}
[Test]
public void IsPrime_InputIs1_ReturnFalse()
{
var result = _primeService.IsPrime(1);
Assert.That(result, Is.False, "1 shouldn't be prime");
}
}
}
Az [TestFixture] attribútum egy osztályt jelöl, amely egységteszteket tartalmaz. Az [Test] attribútum azt jelzi, hogy a metódus egy tesztmetódus.
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. Az NUnit-tesztfuttató 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. 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-nunit 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 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á. Vannak más NUnit-attribútumok is, amelyek lehetővé teszik, hogy hasonló tesztcsomagot írjon. Az [TestCase] attribútumok olyan tesztcsomagok létrehozására szolgálnak, amelyek ugyanazt a kódot hajtják végre, de különböző bemeneti argumentumokkal rendelkeznek. Az attribútummal [TestCase] megadhat értékeket ezekhez a bemenetekhez.
Új tesztek létrehozása helyett alkalmazza ezt az attribútumot egyetlen adatvezérelt teszt létrehozásához. Az adatvezérelt teszt egy olyan módszer, amely több, kettőnél kisebb értéket tesztel, ami a legalacsonyabb prímszám:
[TestCase(-1)]
[TestCase(0)]
[TestCase(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService?.IsPrime(value);
Assert.That(result, Is.False, $"{value} should not be prime");
}
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, elméleteket és kódot ad hozzá a fő kódtárhoz. Önnek van a tesztek
Ö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.