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, olvassa el az ASP.NET Core Integrációs tesztekfejezetet.
Előfeltételek
- A legújabb .NET SDK
- Visual Studio Code szerkesztő
- A C# DevKit
A forrásprojekt létrehozása
Nyisson meg egy parancssor ablakot. Hozzon létre egy unit-testing-using-mstest nevű könyvtárat a megoldás tárolásához. Ebben az új könyvtárban futtassa a dotnet new sln, hogy létrehozhasson egy új megoldásfájlt az osztálytárhoz és a tesztprojekthez. Hozzon létre egy PrimeService könyvtárat. Az alábbi vázlat az eddigi könyvtárat és fájlstruktúrát mutatja be:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Állítsa az aktuális könyvtárba a PrimeService-t, és futtassa dotnet new classlib a forrásprojekt létrehozására. Nevezze át a(z) Class1.cs fájlt a következőképpen: PrimeService.cs. Cserélje le a fájlban lévő kódot a következő kódra a PrimeService osztály sikertelen implementációjának létrehozásához:
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 könyvtárat a unit-testing-using-mstest könyvtárra. A dotnet sln add futtatása az osztálykönyvtár-projekt megoldáshoz való hozzáadásához:
dotnet sln add PrimeService/PrimeService.csproj
A tesztprojekt létrehozása
Hozza létre a PrimeService.Tests könyvtárat. Az alábbi ábra a könyvtárszerkezetet mutatja be:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/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 mstesthasználatával. A dotnet új parancsa létrehoz egy tesztprojektet, amely az MSTestet használja teszttárként. A sablon konfigurálja a tesztfuttatót a PrimeServiceTests.csproj fájlban:
<ItemGroup>
<PackageReference Include="MSTest" Version="3.2.0" />
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.1" />
</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 a kódlefedettségi jelentéskészítéshez szükséges MSTest-csomagokat és eszközöket.
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
A teljes fájl a GitHub
Az alábbi ábra a végső megoldáselrendezést mutatja be:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.csproj
Navigáljon át a unit-testing-using-mstest könyvtárba, és futtassa a dotnet sln add:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
Az első teszt létrehozása
Írjon egy sikertelen tesztet, végezze el, majd ismételje meg a folyamatot. Távolítsa el UnitTest1.cs a PrimeService.Tests könyvtárból, és hozzon létre egy új, PrimeService_IsPrimeShould.cs nevű C#-fájlt a következő tartalommal:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestClass]
public class PrimeService_IsPrimeShould
{
private readonly PrimeService _primeService;
public PrimeService_IsPrimeShould()
{
_primeService = new PrimeService();
}
[TestMethod]
public void IsPrime_InputIs1_ReturnFalse()
{
bool result = _primeService.IsPrime(1);
Assert.IsFalse(result, "1 shouldn't be prime");
}
}
}
A TestClass attribútum egységteszteket tartalmazó osztályt jelöl. A TestMethod attribútum azt jelzi, hogy a metódus egy tesztmetódus.
Mentse ezt a fájlt, és hajtsa végre a dotnet test a tesztek és az osztálytár létrehozásához, 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 meghiúsul, mert 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 bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
A unit-testing-using-mstest könyvtárban futtassa újra az dotnet test utasítást. 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 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 TestMethod attribútummal, de ez gyorsan unalmassá válik. Vannak más MSTest-attribútumok, amelyek lehetővé teszik, hogy hasonló tesztcsomagot írjon. Egy tesztmetódus végrehajthatja ugyanazt a kódot, de különböző bemeneti argumentumokkal rendelkezik. A DataRow attribútummal adhat meg értékeket ezekhez a bemenetekhez.
Új tesztek létrehozása helyett alkalmazza ezt a két 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. Adjon hozzá egy új vizsgálati módszert a PrimeService_IsPrimeShould.cs:
[TestMethod]
[DataRow(-1)]
[DataRow(0)]
[DataRow(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
Assert.IsFalse(result, $"{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, több elméletet és további 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 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ított.