Integracja z Microsoft.Extensions

Te rozszerzenia łączą platformę Microsoft.Testing.Platform (MTP) z bibliotekami Microsoft.Extensions.*, z których aplikacja już korzysta, dzięki czemu składniki platformy i rozszerzeń korzystają z tej samej infrastruktury co reszta kodu. Każde rozszerzenie wymaga dodatkowego pakietu NuGet zgodnie z opisem w każdej sekcji.

Wskazówka

W przypadku korzystania z Microsoft.Testing.Platform.MSBuild pakiet rejestrowania zdarzeń jest automatycznie rejestrowany z wygenerowanym punktem wejścia. Pakiet konfiguracji wymaga wystąpienia IConfiguration, a pakiet hostingu wymaga elementu TestingPlatformHostFactory lub własnego punktu wejścia, więc postępuj zgodnie z sekcjami dotyczącymi ich rejestracji.

Mostek rejestrujący

Mostek logowania przekazuje dzienniki diagnostyczne Microsoft.Testing.Platform do ILogger, więc dzienniki platformy i rozszerzeń przechodzą przez ten sam potok Microsoft.Extensions.Logging, z którego aplikacja już korzysta. Możesz ponownie wykorzystać istniejący stos logowania — Console, Debug, Serilog, Application Insights, OpenTelemetry lub niestandardowy ILoggerProvider — bez konieczności pisania niestandardowego dostawcy loggera MTP. To rozszerzenie wymaga pakietu NuGet Microsoft.Testing.Extensions.Logging.

Note

Dostępne w MTP począwszy od wersji 2.3.0. To rozszerzenie jest eksperymentalne, a jego opcje i format danych wyjściowych mogą ulec zmianie w przyszłej wersji.

Mostek przekazuje każdy komunikat tylko wtedy, gdy włączono rejestrowanie diagnostyczne platformy. Gdy efektywny poziom logowania platformy to None (wartość domyślna, chyba że przekażesz --diagnostic), delegat konfigurujący nie jest wywoływany i nie jest tworzona żadna fabryka loggerów. Filtry według kategorii ustawione w elemecie ILoggingBuilder mogą zawęzić efektywny poziom diagnostyczny platformy, ale nie mogą go poszerzyć.

Rejestracja ręczna

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddMicrosoftExtensionsLogging(logging => logging.AddConsole());

Zrzut konfiguracji

Pakiet eksperymentalny Microsoft.Testing.Extensions.Configuration dodaje migawkę tylko do odczytu aplikacji należącej IConfiguration do potoku konfiguracji MTP.

Zarejestruj konfigurację przed skompilowanie aplikacji testowej:

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddMicrosoftExtensionsConfigurationSnapshot(configuration);

Domyślnie migawka stosuje kolejność 2. Wartości wiersza polecenia MTP (kolejność 0) oraz zmienne środowiskowe (kolejność 1) mają wyższy priorytet, natomiast migawka ma wyższy priorytet niż testconfig.json (kolejność 3). Podaj odmienną kolejność, jeśli aplikacja wymaga innego priorytetu.

MTP odczytuje zrzut, gdy BuildAsync tworzy potok konfiguracji. Późniejsze zmiany i powiadomienia o ponownym załadowaniu nie są przekazywane. Obiekt wywołujący zachowuje własność konfiguracji, klucze hierarchiczne zachowują standardowy : ogranicznik, a rejestracja ma zastosowanie tylko do bieżącego procesu. Obiekt konfiguracji na żywo nie przechodzi do oddzielnego uruchomionego kontrolera ani procesu hosta testowego.

Integracja hosta

Pakiet eksperymentalny Microsoft.Testing.Extensions.Hosting uruchamia MTP wewnątrz należącej do IHostaplikacji . Host pozostaje głównym punktem kompozycji i zarządza własnym dostawcą usług, konfiguracją, logowaniem, dostawcami OpenTelemetry, cyklem życia i zwalnianiem zasobów.

W przypadku wygenerowanego punktu wejścia ustaw TestingPlatformHostFactory na w pełni kwalifikowaną metodę statyczną, która zwraca świeżą, niestartowaną Task<IHost>metodę :

<TestingPlatformHostFactory>Contoso.Tests.TestHost.CreateHost</TestingPlatformHostFactory>

Ustaw TestingPlatformOpenTelemetryMode na HostOwned, gdy host zarządza dostawcami OpenTelemetry, a projekt testowy odwołuje się do Microsoft.Testing.Extensions.OpenTelemetry. Wygenerowany punkt wejścia tworzy i usuwa hosta, zachowuje rozszerzenia zarejestrowane samodzielnie i pomija fabrykę dla wiersza --help polecenia i --info.

W przypadku niestandardowego punktu wejścia wywołaj RunTestingPlatformAsync na hoście i zarejestruj platformę testową za pośrednictwem jego funkcji wywołania zwrotnego. Metoda importuje migawkę konfiguracji, przekazuje diagnostykę MTP do hosta ILoggerFactory, uruchamia hosta przed MTP, wiąże anulowanie hosta i wywołującego z MTP, zwraca kod zakończenia MTP i zatrzymuje hosta w bloku finally. Obiekt wywołujący nadal usuwa hosta.

Utrzymuj standardowe wyjście bez komunikatów związanych z uruchamianiem hosta, zamykaniem, logowaniem i eksporterem, ponieważ MTP używa go w trybach odczytywalnych maszynowo, takich jak --list-tests json, tryb serwera JSON-RPC oraz protokół dotnet test. Należy również unikać globalnych zasobów używanych na wyłączność w fabryce hosta używanej z rozszerzeniami ponownego uruchamiania procesu, ponieważ scenariusze ponawiania próby, zrzutu awaryjnego lub zrzutu przy zawieszeniu mogą spowodować wywołanie fabryki zarówno w procesie kontrolera, jak i w procesach podrzędnych.

Ważna

Interfejsy API konfiguracji i hostingu używają identyfikatora diagnostycznego TPEXP i mogą ulec zmianie w przyszłej wersji. Są one dostępne w pakietach MTP 2.5 (wersja zapoznawcza).