====== NUnit Framework ====== **NUnit** je open-source testovací framework pro všechny .NET jazyky. Patří do rodiny xUnit nástrojů (založených na Smalltalku) a je klíčovým nástrojem pro psaní [[it:sw:unit_testing|jednotkových testů]] a testů řízených daty. ===== 1. Základní architektura NUnit ===== Na rozdíl od [[it:sw:xunit|xUnit.net]], NUnit přistupuje k životnímu cyklu testu odlišně: * **Trvání instance:** Pro všechny testy v rámci jedné třídy se standardně vytváří **jedna instance** třídy. To umožňuje sdílet stav mezi testy (což je ale nutné dělat opatrně). * **Atributy:** NUnit silně spoléhá na atributy (metadatové značky), kterými se definují třídy s testy a jejich chování. --- ===== 2. Klíčové atributy a syntaxe ===== Aby NUnit rozpoznal kód jako testovací, používá specifické značky: * **[TestFixture]:** Označuje třídu, která obsahuje testy. * **[Test]:** Označuje konkrétní metodu jako testovací případ. * **[SetUp]:** Metoda označená tímto atributem se spustí **před každým** jednotlivým testem (např. pro inicializaci proměnných). * **[TearDown]:** Spustí se **po každém** testu (např. pro úklid prostředků). ==== Příklad základního testu: ==== [TestFixture] public class CalculatorTests { private Calculator _calc; [SetUp] public void Init() { _calc = new Calculator(); } [Test] public void Add_SimpleValues_ReturnsSum() { int result = _calc.Add(5, 10); Assert.That(result, Is.EqualTo(15)); } } --- ===== 3. Model Assertací (Ověřování) ===== NUnit nabízí dva styly zápisu ověřovacích podmínek: ==== Klasický model ==== Starší styl, který je stručný, ale méně čitelný. Assert.AreEqual(15, result); ==== Constraint Model (Fluent) ==== Moderní a doporučovaný styl, který se čte jako anglická věta. Používá metodu `Assert.That()`. Assert.That(result, Is.EqualTo(15)); Assert.That(list, Has.Exactly(3).Items); Assert.That(name, Does.StartWith("J").And.EndWith("n")); --- ===== 4. Parametrizované testy: [TestCase] ===== NUnit exceluje v testování různých vstupů pomocí jednoho testu. [TestCase(1, 2, 3)] [TestCase(-1, 1, 0)] [TestCase(10, 20, 30)] public void Add_MultiData_ReturnsCorrectSum(int a, int b, int expected) { Assert.That(_calc.Add(a, b), Is.EqualTo(expected)); } --- ===== 5. Srovnání s xUnit ===== ^ Vlastnost ^ NUnit ^ xUnit ^ | **Značení třídy** | `[TestFixture]` | Není potřeba | | **Značení testu** | `[Test]` | `[Fact]` | | **Příprava dat** | `[SetUp]` | Konstruktor třídy | | **Izolace** | Sdílená instance třídy | Nová instance pro každý test | --- ===== 6. Pokročilé funkce ===== * **[Ignore]:** Dočasně zakáže spuštění testu s uvedením důvodu. * **[MaxTime]:** Test selže, pokud trvá déle než stanovený limit v milisekundách. * **[Category]:** Umožňuje třídit testy (např. "LongRunning", "Integration") a spouštět je odděleně. ---- //Související články:// * [[it:sw:unit_testing|Unit Testing a kvalita kódu]] * [[it:sw:xunit|xUnit.net Framework]] * [[it:sw:mocking|Mockování v .NET (Moq, NSubstitute)]] //Tagy: {{tag>programming dot-net testing nunit unit-test csharp}}//