Obsah
xUnit.net Framework
xUnit.net je moderní testovací nástroj pro platformu .NET, navržený s důrazem na čistotu kódu, rozšiřitelnost a soulad s moderními programovacími praktikami. Jeho autory jsou James Newkirk (původní autor NUnit) a Brad Wilson.
1. Hlavní filozofie xUnit
Na rozdíl od starších frameworků přináší xUnit několik zásadních změn, které vedou k lepším testovacím návykům:
- Bez atributu [TestFixture]: Třída s testy nepotřebuje speciální označení. Každá veřejná třída může obsahovat testy.
- Izolace testů: Pro každý jednotlivý test se vytváří nová instance třídy. Tím je zaručeno, že testy neovlivňují jeden druhého skrze sdílený stav (vlastnosti třídy).
- Konstruktor místo [SetUp]: Namísto speciálních metod pro přípravu prostředí se používá standardní konstruktor třídy. Pro úklid (cleanup) se používá rozhraní `IDisposable`.
—
2. Základní atributy a syntaxe
xUnit rozlišuje dva hlavní typy testů:
[Fact]
Používá se pro testy, které jsou vždy pravdivé (nemají žádné parametry).
[Fact]
public void Je_Sude_Cislo_Vraci_True() {
// Arrange
int cislo = 4;
// Act & Assert
Assert.True(cislo % 2 == 0);
}
[Theory]
Používá se pro data-driven testy (testy s parametry). To umožňuje spustit stejný test s různými vstupními daty.
[Theory]
[InlineData(4, true)]
[InlineData(5, false)]
public void Test_Sudosti(int cislo, bool ocekavanyVysledek) {
bool vysledek = (cislo % 2 == 0);
Assert.Equal(ocekavanyVysledek, vysledek);
}
—
3. Assertace (Ověřování)
xUnit používá statickou třídu `Assert`. Mezi nejpoužívanější metody patří:
- `Assert.Equal(expected, actual)` – Porovnání hodnot.
- `Assert.Throws<ExceptionType>(() ⇒ …)` – Ověření, že kód vyvolá očekávanou výjimku.
- `Assert.Contains(substring, string)` – Kontrola, zda text obsahuje podřetězec.
- `Assert.Empty(collection)` – Kontrola, zda je kolekce prázdná.
—
4. Sdílení kontextu (Fixtures)
Pokud potřebujete sdílet nákladnou operaci (např. připojení k databázi) mezi více testy, xUnit k tomu nabízí mechanismus Class Fixtures:
1. Vytvoříte třídu `DatabaseFixture`. 2. Testovací třída implementuje rozhraní `IClassFixture<DatabaseFixture>`. 3. Framework předá instanci fixture do konstruktoru testovací třídy.
—
5. Srovnání s NUnit a MSTest
| Funkce | xUnit | NUnit | MSTest |
|---|---|---|---|
| Značka testu | `[Fact]` | `[Test]` | `[TestMethod]` |
| Příprava (Setup) | Konstruktor | `[SetUp]` | `[TestInitialize]` |
| Izolace | Nová instance pro každý test | Stejná instance | Stejná instance |
| Parametrické testy | `[Theory]` | `[TestCase]` | `[DataTestMethod]` |
—
6. Integrace v IDE
xUnit je plně integrován do:
- Visual Studio: Pomocí Test Exploreru.
- VS Code: Pomocí rozšíření .NET Core Test Explorer.
- Příkazová řádka: Pomocí příkazu `dotnet test`.
Související články:
Tagy: programming dot-net testing xunit unit-test csharp
