Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento kurz vás provede interaktivním prostředím a podrobným sestavením ukázkového řešení, kde se seznámíte s koncepty testování jednotek. Pokud chcete postupovat podle kurzu pomocí předem připraveného řešení, zobrazit nebo stáhnout ukázkový kód, než začnete. Pokyny ke stažení najdete ve vzorech a návodech .
Tento článek se týká testování projektu .NET Core. Pokud testujete projekt ASP.NET Core, přečtěte si téma Integrační testy v ASP.NET Core.
Požadavky
- Nejnovější sada .NET SDK
- editor Visual Studio Code editoru
- C# DevKit
Vytvoření zdrojového projektu
Otevřete okno příkazového řádku. Vytvořte adresář s názvem unit-testing-using-mstest, který bude obsahovat řešení. V tomto novém adresáři spusťte dotnet new sln
, abyste vytvořili nový soubor řešení pro knihovnu tříd a testovací projekt. Vytvořte adresář PrimeService. Následující osnova ukazuje zatím adresářovou strukturu a strukturu souborů:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Nastavte PrimeService jako aktuální adresář a spuštěním dotnet new classlib
vytvořte zdrojový projekt. Přejmenujte Class1.cs na PrimeService.cs. Nahraďte kód v souboru následujícím kódem, který vytvoří nefunkční implementaci PrimeService
třídy.
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Změňte adresář zpět do adresáře unit-testing-using-mstest. Spusťte dotnet sln add
, abyste přidali do řešení projekt knihovny tříd:
dotnet sln add PrimeService/PrimeService.csproj
Vytvoření testovacího projektu
Vytvořte adresář PrimeService.Tests. Následující osnova ukazuje adresářovou strukturu:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Nastavte adresář PrimeService.Tests jako aktuální a vytvořte nový projekt pomocí dotnet new mstest
. Nový příkaz dotnet vytvoří testovací projekt, který jako testovací knihovnu používá MSTest. Šablona nakonfiguruje spouštěč testů v souboru PrimeServiceTests.csproj:
<ItemGroup>
<PackageReference Include="MSTest" Version="3.2.0" />
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.1" />
</ItemGroup>
Testovací projekt vyžaduje k vytvoření a spuštění testů jednotek další balíčky.
dotnet new
v předchozím kroku jsme přidali potřebné balíčky a nástroje MSTest pro reporting pokrytí kódu.
Přidejte do projektu knihovnu tříd PrimeService
jako další závislost. Použijte příkaz dotnet reference add
:
dotnet reference add ../PrimeService/PrimeService.csproj
Celý soubor můžete zobrazit v úložišti ukázek na GitHubu.
Následující osnova ukazuje konečné rozložení řešení:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.csproj
Přejděte do adresáře unit-testing-using-mstest, a spusťte dotnet sln add
:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
Vytvoření prvního testu
Napište neúspěšný test, proveďte ho úspěšně a opakujte proces. Odstraňte UnitTest1.cs z adresáře PrimeService.Tests a vytvořte nový soubor C# s názvem PrimeService_IsPrimeShould.cs s následujícím obsahem:
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");
}
}
}
Atribut TestClass označuje třídu, která obsahuje jednotkové testy. Atribut TestMethod označuje, že metoda je testovací metodou.
Uložte tento soubor a spusťte #D0, abyste sestavili testy a knihovnu tříd a pak testy spustili. Spouštěč testů MSTest obsahuje vstupní bod programu pro spuštění testů.
dotnet test
spustí spouštěč testů pomocí projektu testu jednotek, který jste vytvořili.
Váš test neuspěl. Ještě jste nevytvořili implementaci. Proveďte tento test tak, že napíšete nejjednodušší kód ve třídě PrimeService
, která funguje:
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
V adresáři unit-testing-using-mstest spusťte dotnet test
znovu. Příkaz dotnet test
spustí sestavení projektu PrimeService
a poté projektu PrimeService.Tests
. Po sestavení obou projektů spustí tento jediný test. Projde.
Přidání dalších funkcí
Nyní, když jste úspěšně prošli jedním testem, je čas napsat více testů. Existuje několik dalších jednoduchých případů pro prime čísla: 0, -1. Můžete přidat nové testy s atributem TestMethod, ale to se rychle stane únavným. Existují další atributy MSTest, které umožňují napsat sadu podobných testů. Testovací metoda může spustit stejný kód, ale má různé vstupní argumenty. K zadání hodnot pro tyto vstupy můžete použít atribut DataRow.
Místo vytváření nových testů použijte tyto dva atributy k vytvoření jednoho testu řízeného daty. Test řízený daty je metoda, která testuje několik hodnot menší než dvě, což je nejnižší základní číslo. Přidejte novou testovací metodu do 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");
}
Spusťte dotnet test
a dva z těchto testů selžou. Aby všechny testy prošly, změňte podmínku if
na začátku metody IsPrime
v souboru PrimeService.cs.
if (candidate < 2)
Pokračujte iterováním přidáním dalších testů, dalších teorie a dalšího kódu v hlavní knihovně. Máte dokončenou verzi testů a kompletní implementaci knihovny.
Vytvořili jste malou knihovnu a sadu jednotkových testů pro tuto knihovnu. Řešení jste strukturovali tak, aby přidání nových balíčků a testů bylo součástí normálního pracovního postupu. Většinu času a úsilí jste se zaměřili na řešení cílů aplikace.