Testování aplikací EF Core

Testování je důležité u téměř všech typů aplikací – umožňuje zajistit, aby vaše aplikace fungovala správně, a okamžitě zjistit, jestli se její chování v budoucnu nezhorší. Vzhledem k tomu, že testování může ovlivnit návrh kódu, důrazně doporučujeme naplánovat testování včas a zajistit dobré pokrytí při vývoji vaší aplikace. Tato úvodní část obsahuje stručný přehled různých testovacích strategií pro aplikace využívající EF Core.

Zahrnutí (nebo nezahrnutí) databáze

Jedno ze základních rozhodnutí, které při psaní testů pro aplikaci EF Core musíte učinit, spočívá v tom, jestli budou testy zahrnovat produkční databázový systém – stejně jako vaše aplikace – nebo jestli se testy budou provádět vůči testovacímu dvojníkovi, který nahrazuje produkční databázový systém. Mezi dva významné příklady testovacích dvojníků v kontextu EF Core patří režim SQLite v paměti a poskytovatel v paměti.

Podrobné porovnání a analýzu těchto odlišných přístupů najdete v článku Volba testovací strategie. Níže je stručný bodový přehled, který vám pomůže se zorientovat v různých možnostech:

  • Vývojáři se často vyhýbají testování vůči produkčnímu databázovému systému, protože se domnívají, že je to obtížné nebo pomalé. Podle našich zkušeností to neplatí vždy a navrhujeme, abyste tomuto přístupu dali šanci: článek Testování vůči produkčnímu databázovému systému poskytuje techniky pro spolehlivé a efektivní provádění tohoto postupu. Vytvoření alespoň několika testů vůči databázi je většinou nezbytné v každém případě – abyste měli jistotu, že vaše aplikace s produkční databází skutečně funguje – a testy bez zahrnutí databáze mohou být omezené v tom, co vám umožní testovat (viz níže).
  • Poskytovatel v paměti se v mnoha důležitých ohledech nebude chovat jako skutečná databáze. Některé funkce s ním nelze testovat vůbec (například transakce, nezpracované SQL...), zatímco jiné funkce se mohou chovat jinak než v produkční databázi (například rozlišování malých a velkých písmen v dotazech). I když v paměti může fungovat pro jednoduché omezené scénáře dotazů, je vysoce omezený a nedoporučujeme ho používat.
    • Napodobování DbSet pro dotazování je složité a obtížné a má stejné nevýhody jako přístup v paměti; rovněž ho nedoporučujeme.
  • Režim SQLite v paměti nabízí lepší kompatibilitu s produkčními relačními databázemi, protože SQLite je samo o sobě plnohodnotnou relační databází. Mezi SQLite a vaší produkční databází ale pořád budou určité důležité nesrovnalosti, přičemž některé funkce se nedají testovat vůbec (například metody specifické pro poskytovatele u EF. Functions).
  • Pro testovací přístup, který umožňuje používat spolehlivého testovacího dvojníka pro všechny funkce vašeho produkčního databázového systému, můžete do aplikace zavést vrstvu úložiště. Díky tomu lze EF Core z testování zcela vyloučit a plně napodobit úložiště; to však mění architekturu aplikace způsobem, který by mohl být významný, a zahrnuje větší náklady na implementaci a údržbu.

Další texty

Podrobnější informace najdete v článku Volba testovací strategie. Pokyny k implementaci a ukázky kódu najdete v článku Testování vůči produkčnímu databázovému systému a Testování bez produkčního databázového systému.