Condividi tramite


Creare estensioni personalizzate

Questo articolo è destinato agli sviluppatori che creano framework di test personalizzati o estensioni per Microsoft.Testing.Platform.

Nota

Per il codice di esempio completo, vedere TestingPlatformExamples nel repository di Microsoft Test Framework.

Riepilogo del punto di estensione

Punto di estensione All'interno/Fuori dal processo Scopo
ITestFramework In corso L'unica estensione obbligatoria. Individua ed esegue test.
IDataConsumer In corso Sottoscrive ed elabora i dati di test dal bus di messaggi.
ITestSessionLifetimeHandler In corso Esegue il codice prima e dopo una sessione di test.
ITestApplicationLifecycleCallbacks In corso Esegue il codice all'inizio e alla fine dell'host di test.
ICommandLineOptionsProvider Entrambi Aggiunge opzioni della riga di comando personalizzate.
ITestHostEnvironmentVariableProvider Fuori processo Imposta le variabili di ambiente prima dell'avvio dell'host di test.
ITestHostProcessLifetimeHandler Fuori processo Osserva il processo host di test esternamente.

Estensioni in-process e out-of-process

Le estensioni sono suddivise in due tipi:

  • Le estensioni in-process vengono eseguite all'interno del processo host di test, insieme al framework di test. Registrali tramite builder.TestHost:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHost.AddXXX(/* ... */);
    
  • Le estensioni out-of-process vengono eseguite in un processo separato che osserva l'host di test. Registrali tramite builder.TestHostControllers:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHostControllers.AddXXX(/* ... */);
    

Le estensioni fuori dal processo sono necessarie quando:

  • È necessario impostare le variabili di ambiente prima dell'avvio dell'host di test.
  • È necessario monitorare l'host di test esternamente perché il codice utente potrebbe causare l'arresto anomalo o il blocco del processo.

Quando viene registrata un'estensione out-of-process, la piattaforma avvia automaticamente un secondo processo.

Interfaccia IExtension

Tutti i punti di estensione ereditano da IExtension, che fornisce l'identificazione e l'adesione/la rinuncia opzionale.

public interface IExtension
{
    string Uid { get; }
    string Version { get; }
    string DisplayName { get; }
    string Description { get; }
    Task<bool> IsEnabledAsync();
}
  • Uid: identificatore univoco per l'estensione. Scegliere un valore univoco per evitare conflitti.
  • Version: La versione dell'estensione, utilizzando il versionamento semantico.
  • DisplayName: un nome facile da usare che appare nei log e --info nell'output.
  • Description: descrizione visualizzata nell'output --info .
  • IsEnabledAsync(): Restituisci false per escludere l'estensione dalla sessione. In genere, le decisioni si basano sulle opzioni della configurazione o della riga di comando.
  • Creare un framework di test: creare un'implementazione personalizzata ITestFramework , gestire le richieste e segnalare i risultati dei test.
  • Creazione di estensioni: creare estensioni in-process e out-of-process, come consumer di dati, gestori di sessione e monitor dei processi.
  • VSTest Bridge: semplificare la migrazione di framework di test basati su VSTest esistenti a Microsoft.Testing.Platform.
  • Funzionalità: dichiarare il framework di query e le funzionalità di estensione.
  • Services: configurazione Access, registrazione, bus di messaggi e altri servizi della piattaforma.