Na DotVVM právě dokončujeme migraci na .NET Core a důležitou součástí jsou testy. Potřebujeme testovat různé kombinace, protože potřebujeme podporovat velký .NET Framework, Mono i .NET Core, a zároveň je kromě nového ASP.NET hlavní platformou OWIN.
A samozřejmě to potřebujeme testovat jak na Windows, tak na Linuxu a Mac OS. Máme testy na framework samotný (unit a integrační testy), a pak máme mnoho UI testů v Seleniu, které otevřou prohlížeč, fyzicky klikají do stránky a kontrolují, že se děje to, co by se dít mělo.
Z historických důvodů jsme používali MSTest, což sklízelo u některých lidí udivené reakce, že jako proč ne xUnit a kdesi cosi. V reálu mě mnohem víc pálí to, že máme testů stovky, přičemž bychom jich měli mít tisíce.
Nicméně, Microsoft po letech nečinnosti s MSTestem konečně začal něco dělat, a díky tomu je možné napsat testy tak, aby běžely jak na plném .NETu, tak i na .NET Core.
Předpokládejme, že testovaná aplikace je Class Library, která podporuje platformy net461 (plný .NET 4.6.1) a netcoreapp1.0 (tedy .NET Core), a chceme k ní udělat testy.
Je potřeba udělat následující kroky:
1. Přidáme do solution nový projekt typu Console Application (.NET Core).
2. Smažeme z ní Program.cs a z project.json vymažeme “emitEntryPoint”: “true”.
3. Přidáme následující Nuget balíčky (v project.json do sekce dependencies):
- "MSTest.TestFramework": "1.0.1-preview" (samotný testovací framework)
- "dotnet-test-mstest": "1.1.1-preview" (test runner, který řekne VS, jak má testy hledat, a umožní je spustit z command line)
4. Dále je samozřejmě nutné nareferencovat testovaný projekt, takže do sekce dependencies přidáme ještě toto:
"MsTestDemo.App": {
"target": "project"
}
5. Dále je třeba přidat pod version ještě tuto klauzuli:
"testRunner": "mstest"
Nyní stačí napsat samotné testy a projekt by měl jít normálně zkompilovat.
Testy by měly jít spustit jak z okna Test Explorer, tak z příkazového řádku pomocí volání dotnet test. Spustí se na všech platformách, které jsou specifikované v project.json.
Pro demonstraci jsem připravil
ukázkový projekt.