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# 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 mstest
haszná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 should not 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 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 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 teljesített egy teszteredményt, 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
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.