Typická chyba je dlouhé držení větve a čekání na schválení. Další je force push do sdílené větve, který smaže kolegům jejich commity. Vyhněte se také commitům se zprávami typu „oprava" nebo „úpravy". Zaveďte si pravidlo, že hlavní větev je chráněná a přímý push do ní není možný. Tým, který dodržuje krátké větve, jasné zprávy a povinnou kontrolu, stráví méně času hašením požárů a více psaním kódu, který funguje.
Dokumentace bývá první místo, kam se lidé dívají, ale sama o sobě nestačí. Čtěte ji kriticky: hledejte sekce o omezeních, známých chybách a verzích, ve kterých byla funkce přidána nebo naopak odstraněna. Pokud něco chybí, ověřte to v diskusních fórech nebo v systému pro hlášení chyb. Užitečné je také zjistit, jak často vycházejí opravy a zda jsou bezpečnostní aktualizace řešeny pravidelně. Databáze, která je technicky skvělá, ale nemá aktivní údržbu, se může stát pastí.
Rozhodování o tom, kde poběží databáze, se zvrhne v hádku o penězích a module. Přitom jde o něco jiného: jak rychle se data dostanou tam, kam mají, a kdo za to nese odpovědnost. Než začneš srovnávat nabídky, zjisti, jaký typ zátěže databáze vlastně obsluhuje. Jiné nároky má e-shop s tisíci transakcemi za minutu, jiné interní evidence s desítkami uživatelů. Podle toho se odvíjí všechno ostatní.
Hranice, které se v praxi osvědči
Největší chyba při zavádění NUnit do C# projektu není špatná knihovna, ale představa, že testy jednotek jsou jen formalita. Vývojáři často napíšou pár testů, které ověřují, že metoda vrátí true, a pak jsou překvapeni, že jim testy neodhalí žádnou regresi. NUnit je přitom nástroj, který umí mnohem víc – od parametrizovaných testů přes fixture až po vlastní assertiony. Jen je potřeba vědět, kde se šlápne vedle.
Kde se rozhoduje v praxi GraphQL se vyplatí, když frontend skládá obrazovku z mnoha entit a nechce posílat pět požadavků. Jeden dotaz vrátí přesně to, co komponenta potřebuje. Naopak pro veřejné API, webhooky, nahrávání souborů nebo jednoduché CRUD operace je REST přirozenější. GraphQL nad soubory neumí dobře pracovat, stejně tak u dlouhých operací narazíte na to, že dotazovací jazyk není stavový. Pro běžné čtení a zápis jednoho záznamu je REST kratší cesta k hotové funkci.
Typická chyba je podcenit velikost datového souboru. Databáze, která má dnes pár set megabajtů, může za rok narůst na desítky gigabajtů. Zjisti, jakým tempem data přibývají a jestli se dají archivovat. U některých poskytovatelů se cena odvíjí od velikosti úložiště, jinde od počtu operací. Špatný odhad znamená, že po půl roce musíš migrovat, a to je nejdražší operace vůbec. Migrace za provozu není nemožná, ale vyžaduje přípravu a okno, kdy aplikace nesmí zapisovat.
Prvním krokem je změřit skutečnou latenci mezi aplikací a databází. Vezmi reálný provoz, ne testovací dotazy na prázdných tabulkách. Zjisti, jestli převažují čtení, nebo zápisy, jak velké jsou výsledné sady a jestli dotazy používají indexy. Pokud databáze běží na jiném místě než aplikace, každý dotaz zaplatí síťovou režii. U jednoduchých dotazů se to nasčítá do sekund, u analytických už tak dlouhých dotazů to zmizí. Tohle číslo rozhoduje víc než cena za gigabajt.
Na konci porovnej jen dvě věci: jak dlouho trvá obnova a kolik práce dá přejít jinam. Pokud jsou obě čísla přijatelná, rozhodni se podle toho, co umí tvůj tým. Technologie, kterou nikdo neumí ovládat, je dražší než ta, která má vyšší cenu za provoz.
U složitějších scénářů se vyplatí [TestCaseSource] nebo [TestCase] s více parametry. Pozor na to, že NUnit spouští testy v nedefinovaném pořadí. Nikdy nespoléhejte na to, že test A proběhne před testem B. Pokud spolu testy potřebují komunikovat, je to znamení, že by měly být jedním testem, nebo že testujete něco, co by mělo být oddělené.
Nakonec se nebojte kombinace. REST pro veřejné a souborové endpointy, GraphQL pro složité čtecí scénáře uvnitř produktu. Rozhodujte podle konkrétních dotazů, které klienti posílají, ne podle toho, co zní moderněji. Změřte počet požadavků na obrazovku, velikost odpovědí a dobu odezvy. Teprve čísla ukážou, zda se vyplatí měnit architekturu.
Zvažte i tým a nástroje. GraphQL vyžaduje schéma, které se musí udržovat, a klienti často generují typy. To je výhoda v typovaných jazycích, ale znamená to další krok v CI. REST zvládne i malý tým bez speciálních znalostí. Pokud potřebujete rychle dodat první verzi a rozsah dat je malý, začněte RESTem. GraphQL přidejte ve chvíli, kdy vás opakované požadavky na složení dat skutečně brzdí, ne dřív.
Na závěr: testy jednotek v NUnit nejsou o počtu, ale o tom, zda dokážou odhalit chybu dřív než uživatel. Vyhněte se testování implementačních detailů, používejte Assert.That, izolujte stav a pojmenovávejte testy tak, aby z názvu bylo jasné, co se testuje. Jakmile začnete psát testy před kódem, zjistíte, že NUnit není jen knihovna pro ověřování – je to nástroj pro návrh.