Integrazione con Microsoft.Extensions

Queste estensioni collegano Microsoft.Testing.Platform (MTP) alle librerie Microsoft.Extensions.* già utilizzate dall'applicazione, così i componenti della piattaforma e delle estensioni passano tramite la stessa infrastruttura del resto del codice. Ogni estensione richiede un pacchetto NuGet aggiuntivo, come descritto in ogni sezione.

Tip

Quando si usa Microsoft. Testing.Platform.MSBuild, il pacchetto di registrazione viene registrato automaticamente con un punto di ingresso generato. Il pacchetto di configurazione richiede un'istanza IConfiguration e il pacchetto di hosting richiede TestingPlatformHostFactory o un punto di ingresso personalizzato, quindi seguire le sezioni di registrazione.

Bridge di registrazione

Il bridge di registrazione inoltra i log diagnostici di Microsoft.Testing.Platform a ILogger, così i log della piattaforma e delle estensioni passano attraverso la stessa pipeline Microsoft.Extensions.Logging già utilizzata dall'applicazione. È possibile riutilizzare uno stack di logging esistente — Console, Debug, Serilog, Application Insights, OpenTelemetry o un elemento personalizzato ILoggerProvider — senza scrivere un provider di logging MTP personalizzato. Questa estensione richiede il pacchetto NuGet Microsoft.Testing.Extensions.Logging.

Note

Disponibile in MTP a partire dalla versione 2.3.0. Questa estensione è sperimentale e le opzioni e il formato di output potrebbero cambiare in una versione futura.

Il bridge inoltra ogni messaggio solo quando la registrazione diagnostica della piattaforma è abilitata. Quando il livello di log effettivo della piattaforma è None (impostazione predefinita, a meno che non si passi --diagnostic), il delegato di configurazione non viene richiamato e non viene creata alcuna factory del logger. I filtri per categoria impostati in ILoggingBuilder possono limitare il livello di diagnostica effettivo della piattaforma, ma non possono estenderlo.

Registrazione manuale

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

Istantanea della configurazione

Il pacchetto sperimentale Microsoft.Testing.Extensions.Configuration aggiunge una snapshot di sola lettura di un IConfiguration di proprietà dell'applicazione alla pipeline di configurazione di MTP.

Registrare la configurazione prima di compilare l'applicazione di test:

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

Per impostazione predefinita, lo snapshot usa l'ordine 2. I valori della riga di comando MTP (ordine 0) e le variabili di ambiente (ordine 1) hanno la precedenza, mentre lo snapshot ha la precedenza su testconfig.json (ordine 3). Passa un ordine diverso quando l'applicazione richiede un'altra priorità.

MTP legge lo snapshot quando BuildAsync compila la pipeline di configurazione. Le modifiche successive e le notifiche di ricaricamento non vengono propagate. Il chiamante mantiene la proprietà della configurazione, le chiavi gerarchiche mantengono il delimitatore standard : e la registrazione si applica solo al processo corrente. Un oggetto di configurazione in tempo reale non passa a un controller avviato separatamente o a un processo host di test.

Integrazione dell'host

Il pacchetto sperimentale Microsoft.Testing.Extensions.Hosting esegue MTP all'interno di un IHost di proprietà dell'applicazione. L'host rimane il composition root e gestisce il proprio provider di servizi, la configurazione, il logging, i provider OpenTelemetry, il ciclo di vita e il rilascio delle risorse.

Per un punto di ingresso generato, impostare TestingPlatformHostFactory su un metodo statico completamente qualificato che restituisce un nuovo Task<IHost> non ancora avviato:

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

Impostare TestingPlatformOpenTelemetryMode su HostOwned quando l'host gestisce i provider OpenTelemetry e il progetto di test fa riferimento a Microsoft.Testing.Extensions.OpenTelemetry. Il punto di ingresso generato crea ed elimina l'host, mantiene le estensioni autoregistrate e ignora la factory per la riga --help di comando e --info.

Per creare un punto di ingresso personalizzato, chiama RunTestingPlatformAsync sull'host e registra il framework di test tramite la relativa callback. Il metodo importa un'istantanea della configurazione, inoltra la diagnostica di MTP all'ILoggerFactoryhost, avvia l'host prima di MTP, collega a MTP l'annullamento dell'host e del chiamante, restituisce il codice di uscita di MTP e arresta l'host in un blocco finally. Il chiamante elimina comunque l'host.

Mantenete l'output standard libero dai messaggi di avvio, arresto, log e dell'esportatore dell'host, perché MTP lo usa per modalità leggibili dalla macchina come --list-tests json, la modalità server JSON-RPC e il protocollo dotnet test. Evitare anche risorse globali esclusive in una factory host utilizzata con estensioni per il riavvio del processo, perché scenari di nuovo tentativo, crash dump o hang dump potrebbero richiamare la factory nei processi controller e figlio.

Importante

Le API di configurazione e hosting usano l'ID TPEXP di diagnostica e potrebbero cambiare in una versione futura. Sono disponibili nei pacchetti di anteprima mtp 2.5.