4 návyky, které rozhodují o kvalitě testů v NUnit

Aus Rettungsdienst-Wiki
Version vom 1. Oktober 2026, 20:16 Uhr von BlairKoss6 (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Refaktorování často skončí jako ruční přepisování, při kterém se snadno zapomene na okrajové případy. Přitom většina moderních IDE nabízí nástroje, které stejnou práci zvládnou rychleji a bezpečněji. Klíčem je vědět, které funkce použít a kdy. Nejde o hromadné přejmenování všeho, co najdete, ale o cílené zásahy s okamžitou kontrolou.<br><br>Kde se migrace nejčastěji zasekne Největší překvapení přichází…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Refaktorování často skončí jako ruční přepisování, při kterém se snadno zapomene na okrajové případy. Přitom většina moderních IDE nabízí nástroje, které stejnou práci zvládnou rychleji a bezpečněji. Klíčem je vědět, které funkce použít a kdy. Nejde o hromadné přejmenování všeho, co najdete, ale o cílené zásahy s okamžitou kontrolou.

Kde se migrace nejčastěji zasekne Největší překvapení přichází u textového vyhledávání a řazení. PostgreSQL rozlišuje velikost písmen a diakritiku podle kolace databáze. Dotazy, které v MySQL fungovaly díky výchozímu porovnávání bez ohledu na velikost písmen, mohou v PostgreSQL vracet jiné výsledky. Řešením je používat funkce pro porovnání nebo správně zvolenou kolaci. Podobně ukládání dat: MySQL toleruje neplatná data v DATETIME, PostgreSQL je odmítne. Na to narazíte při importu starších záznamů, kde jsou nuly nebo prázdné řetězce místo platného data.

Třetí návyk se týká asercí. NUnit nabízí Assert.That s omezeními (constraints), která jsou čitelnější a poskytují lepší chybové zprávy než starší Assert.AreEqual. Pište Assert.That(vysledek, Is.EqualTo(5)) a při selhání dostanete přesnou hodnotu očekávanou i skutečnou. U kolekcí použijte Is.EquivalentTo, pokud nezáleží na pořadí, a Is.Ordered, pokud záleží. Častá chyba je testovat více věcí v jednom testu. Když první aserce selže, o zbytku se nic nedozvíte. Rozdělte je do samostatných testů, i když to znamená více metod.

Praktický postup začíná exportem dat. Z MySQL vytáhněte schéma i data zvlášť, ideálně v režimu, který neobsahuje komentáře specifické pro MySQL a příkazy pro vypnutí kontrol cizích klíčů. Data exportujte jako čisté INSERTy nebo CSV. Při převodu schématu převeďte typy: TINYINT(1) často končí jako BOOLEAN, DATETIME nahraďte TIMESTAMP nebo TIMESTAMPTZ podle toho, zda potřebujete časová pásma. AUTO_INCREMENT nahraďte GENERATED … AS IDENTITY nebo SERIAL. ENUM v PostgreSQL nahraďte vlastním typem nebo tabulkou s číselníkem, jinak narazíte na problémy při změnách hodnot.

První návyk se týká izolace. Každý test musí být nezávislý na pořadí, v jakém ho runner spustí, a nesmí měnit stav, který ovlivní ostatní testy. V praxi to znamená, že sdílená data nevytváříte v jednorázovém setupu na úrovni třídy, pokud je testy pouze čtou a nikdy nemění. Jakmile test zapisuje do statické kolekce, do souboru nebo do databáze, potřebuje vlastní instanci. NUnit k tomu nabízí atributy [SetUp] a [TearDown], které se volají před a po každém testu, nikoli před a po celé třídě. Záměna těchto úrovní je nejčastější příčina testů, které procházejí samostatně, ale padají ve skupině.

U dávkového vkládání a hromadných aktualizací se často objevuje jiná chyba: aplikace spojí více hodnot do jednoho dotazu a zapomene, že počet parametrů musí odpovídat počtu zástupných symbolů. Pokud se počet neshoduje, vývojář sáhne po ručním skládání a tím vrátí injektáž zpět do hry. Bezpečnější je zpracovat dávku po menších částech nebo použít jeden připravený dotaz v cyklu, i za cenu mírně vyšší režie.

Poslední věc, kterou lidé podceňují: před odesláním si zprávu přečtěte nahlas. Pokud zní krkolomně nebo vám nedává smysl bez otevřeného diffu, přepište ji. Historie verzí je dokumentace, kterou nikdo neaktualizuje zpětně. Dobře napsaná zpráva je jediná stopa, která po změně zůstane.

Druhý častý problém je práce s transakcemi a zámky. MySQL má výchozí autocommit a特定 chování u nevýkonných dotazů, PostgreSQL je přísnější. Dlouhé transakce blokují úklid starých verzí řádků a mohou nafouknout databázi. Při migraci proto zkontrolujte, zda aplikace neotevírá transakce zbytečně dlouho. Pozor také na ON DUPLICATE KEY UPDATE — v PostgreSQL použijete INSERT … ON CONFLICT. Nahrazení není mechanické, musíte určit konfliktní sloupec.

Testování jednotek v C# s NUnit vypadá na první pohled jednoduše: napíšete metodu, ozdobíte ji atributem [Test], spustíte runner a hotovo. Jenže rozdíl mezi sadou testů, která vám vydrží roky, a sadou, kterou po měsíci přestanete spouštět, netkví v syntaxi. Tkví v návycích, které se kolem psaní testů vytvoří. Následující čtyři zásady pokrývají většinu problémů, na které při práci s NUnit narazíte.

Než uděláte první potvrzení změn, založte soubor, který vyjmenuje ignorované cesty. Bez něj se do historie dostanou tisíce souborů z knihoven a každá změna závislosti zaplaví rozdíly, ve kterých se nedá nic najít. Stejně důležité je nastavit jméno a e-mail, protože podle nich se přiřazují jednotlivé změny. Pak teprve inicializujte repozitář a přidejte první dávku souborů. Kontrolujte, co se chystá k uložení, a to ještě před samotným potvrzením.