====== 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}}//