====== 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(() => ...)` – 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`.
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://
* [[it:sw:unit_testing|Unit Testing a kvalita kódu]]
* [[it:sw:solid|Principy SOLID]]
* [[it:sw:mocking|Mockování v .NET (Moq, NSubstitute)]]
//Tagy: {{tag>programming dot-net testing xunit unit-test csharp}}//