Izolowanie testowanego kodu za pomocą struktury Microsoft Fakes
Izolacja kodu to strategia testowania często implementowana za pomocą narzędzi, takich jak Microsoft Fakes, gdzie testowany kod jest oddzielony od pozostałej części aplikacji. Ta separacja jest osiągana przez zastąpienie części aplikacji, które wchodzą w interakcję z kodem testowym za pomocą wycinków lub podkładek. Są to małe fragmenty kodu kontrolowane przez testy, które symulują zachowanie rzeczywistych części, które zastępują.
Zaletą tego podejścia jest to, że pozwala skupić się na testowaniu określonych funkcji kodu w izolacji. Jeśli test zakończy się niepowodzeniem, wiadomo, że przyczyna znajduje się w izolowanym kodzie, a nie w innym miejscu. Ponadto użycie wycinków i podkładek udostępnianych przez firmę Microsoft Fakes umożliwia przetestowanie kodu, nawet jeśli inne części aplikacji jeszcze nie działają.
Wymagania
- Visual Studio Enterprise
- Projekt programu .NET Framework
- .NET Core, .NET 5.0 lub nowszy oraz obsługa projektu w stylu zestawu SDK w wersji zapoznawczej w programie Visual Studio 2019 Update 6 i jest domyślnie włączona w aktualizacji Update 8. Aby uzyskać więcej informacji, zobacz Microsoft Fakes for .NET Core and SDK-style projects (Aplikacje Microsoft Fakes dla platformy .NET Core i projektów w stylu zestawu SDK).
Uwaga
Profilowanie za pomocą programu Visual Studio nie jest dostępne dla testów korzystających z aplikacji Microsoft Fakes.
Rola fakes firmy Microsoft w izolacji kodu
Microsoft Fakes odgrywa kluczową rolę w izolacji kodu, zapewniając dwa mechanizmy - wycinki i podkładki.
Wycinki: są one używane do zastępowania klasy małym zamiennikiem, który implementuje ten sam interfejs. Wymaga to zaprojektowania aplikacji tak, aby każdy składnik był zależny tylko od interfejsów, a nie od innych składników.
Podkładki: służą do modyfikowania skompilowanego kodu aplikacji w czasie wykonywania. Zamiast wywoływać określoną metodę, aplikacja uruchamia kod podkładki, który udostępnia test. Podkładki mogą zastępować wywołania zestawów, których nie można modyfikować, takich jak zestawy platformy .NET.
Zazwyczaj wycinki są używane do wywołań w rozwiązaniu programu Visual Studio i podkładek dla wywołań do innych zestawów, do których odwołuje się odwołanie. Jest to spowodowane tym, że w rozwiązaniu dobrym rozwiązaniem jest oddzielenie składników przez zdefiniowanie interfejsów w taki sposób, w jaki wymaga odcięcie. Jednak zestawy zewnętrzne często nie są dostarczane z oddzielnymi definicjami interfejsu, więc zamiast tego są używane podkładki.
Rekomendacje kiedy używać wycinków
Wycinki są zwykle używane w przypadku wywołań w rozwiązaniu programu Visual Studio, ponieważ dobrym rozwiązaniem jest oddzielenie składników przez zdefiniowanie interfejsów w sposób wymagany przez odcięcie. Jednak zestawy zewnętrzne, takie jak System.dll, zwykle nie są dostarczane z oddzielnymi definicjami interfejsu, więc podkładki będą używane w tych przypadkach.
Używanie wycinków polega na projektowaniu aplikacji, tak aby różne składniki nie zależały od siebie, ale tylko w przypadku definicji interfejsu. To oddzielenie sprawia, że aplikacja jest bardziej niezawodna i elastyczna i umożliwia łączenie składnika testowego z implementacjami wycinków interfejsów na potrzeby testowania.
W praktyce można wygenerować typy wycinków z definicji interfejsu w programie Visual Studio, a następnie zastąpić rzeczywisty składnik wycinkiem w teście.
Rekomendacje kiedy używać podkładek
Podczas gdy wycinki są używane do wywołań w rozwiązaniu programu Visual Studio, podkładki są zwykle używane do wywołań do innych zestawów, do których się odwołujesz. Wynika to z faktu, że zestawy zewnętrzne, takie jak System.dll, zwykle nie są dostarczane z oddzielnymi definicjami interfejsu, dlatego zamiast tego należy używać podkładek.
Istnieją jednak pewne czynniki, które należy wziąć pod uwagę podczas korzystania z podkładek:
Wydajność: podkładki działają wolniej, ponieważ ponownie zapiszą kod w czasie wykonywania. Wycinki nie mają tego obciążenia związanego z wydajnością i są tak szybkie, jak metody wirtualne mogą być uruchamiane.
Metody statyczne, zapieczętowane typy: do implementowania interfejsów można używać tylko wycinków. W związku z tym typy wycinków nie mogą być używane dla metod statycznych, metod niewirtuatycznych, zapieczętowanych metod wirtualnych, metod w typach zapieczętowanych itd.
Typy wewnętrzne: Zarówno wycinki, jak i podkładki mogą być używane z typami wewnętrznymi, które są dostępne za pomocą atrybutu InternalsVisibleToAttributezestawu .
Metody prywatne: podkładki mogą zastępować wywołania metod prywatnych, jeśli wszystkie typy sygnatury metody są widoczne. Wycinki mogą zastępować tylko widoczne metody.
Interfejsy i metody abstrakcyjne: wycinki zapewniają implementacje interfejsów i abstrakcyjnych metod, które mogą być używane podczas testowania. Podkładki nie mogą instrumentować interfejsów i metod abstrakcyjnych, ponieważ nie mają treści metod.
Przenoszenie aplikacji Microsoft Fakes w programie .NET Framework do projektów w stylu zestawu SDK
Przejście projektów testowych programu .NET Framework, które używają platformy Microsoft Fakes do projektów .NET Framework w stylu zestawu SDK, .NET Core lub .NET 5+.
Do przejścia na platformę .NET Core lub .NET 5.0 będą potrzebne minimalne zmiany w programie .NET Framework skonfigurowanym dla platformy Microsoft Fakes. Przypadki, które należy wziąć pod uwagę, to:
Jeśli używasz niestandardowego szablonu projektu, musisz upewnić się, że jest to styl zestawu SDK i kompilacje dla zgodnej platformy docelowej.
Niektóre typy istnieją w różnych zestawach w programach .NET Framework i .NET Core/.NET 5.0 (na przykład
System.DateTime
wmscorlib
System
/programie .NET Framework iSystem.Runtime
na platformie .NET Core i .NET 5.0), a w tych scenariuszach należy zmienić fałszywy zestaw.Jeśli masz odwołanie do zestawu fakes i projektu testowego, może zostać wyświetlone ostrzeżenie kompilacji dotyczące brakującego odwołania podobnego do:
(ResolveAssemblyReferences target) -> warning MSB3245: Could not resolve this reference. Could not locate the assembly "AssemblyName.Fakes". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
To ostrzeżenie wynika z niezbędnych zmian wprowadzonych w pokoleniu Fakes i można je zignorować. Można go uniknąć, usuwając odwołanie do zestawu z pliku projektu, ponieważ teraz niejawnie dodajemy je podczas kompilacji.
Uruchamianie testów firmy Microsoft Fakes
Tak długo, jak zestawy Microsoft Fakes są obecne w skonfigurowanym FakesAssemblies
katalogu (wartość $(ProjectDir)FakesAssemblies
domyślna), można uruchamiać testy przy użyciu zadania vstest.
Testowanie rozproszone za pomocą zadań vstest .NET Core i .NET 5+ przy użyciu programu Microsoft Fakes wymaga programu Visual Studio 2019 Update 9 (wersja zapoznawcza 20201020-06
) i nowszych.
Zgodność i obsługa aplikacji Microsoft Fakes w różnych wersjach platformy .NET i programu Visual Studio
Microsoft Fakes w starszych projektach przeznaczonych dla platformy .NET Framework (bez zestawu SDK).
- Generowanie zestawów Microsoft Fakes jest obsługiwane w programie Visual Studio Enterprise 2015 i nowszych wersjach.
- Testy Microsoft Fakes mogą być uruchamiane ze wszystkimi dostępnymi pakietami NuGet Microsoft.TestPlatform.
- Pokrycie kodu jest obsługiwane w przypadku projektów testowych korzystających z programu Microsoft Fakes w programie Visual Studio Enterprise 2015 lub nowszym.
Microsoft Fakes w projektach .NET Framework w stylu zestawu SDK, .NET Core i .NET 5.0 lub nowszych
- Wersja zapoznawcza generacji zestawów Microsoft Fakes jest dostępna w programie Visual Studio Enterprise 2019 Update 6 i jest domyślnie włączona w aktualizacji Update 8.
- Testy microsoft Fakes dla projektów przeznaczonych dla platformy .NET Framework mogą być uruchamiane ze wszystkimi dostępnymi pakietami NuGet Microsoft.TestPlatform.
- Testy aplikacji Microsoft Fakes dla projektów przeznaczonych dla platform .NET Core i .NET 5.0 lub nowszych mogą być uruchamiane przy użyciu pakietów NuGet Microsoft.TestPlatform w wersjach 16.9.0-preview-20210106-01 i nowszych.
- Pokrycie kodu jest obsługiwane w przypadku projektów testowych przeznaczonych dla platformy .NET Framework przy użyciu programu Microsoft Fakes w programie Visual Studio Enterprise w wersji 2015 lub nowszej.
- Obsługa pokrycia kodu dla projektów testowych przeznaczonych dla platform .NET Core i .NET 5.0 lub nowszego przy użyciu programu Microsoft Fakes jest dostępna w programie Visual Studio 2019 update 9 lub nowszym.
Powiązana zawartość
- Stosowanie wycinków kodu do izolowania od siebie poszczególnych części aplikacji w celu przeprowadzania testów jednostkowych
- Stosowanie podkładek do izolowania aplikacji od innych zestawów w celu przeprowadzania testów jednostkowych
- Konwencje dotyczące generowania kodu, jego kompilowania i nazywania w Microsoft Fakes