Partager via


Créer des extensions personnalisées

Cet article est destiné aux développeurs qui créent des frameworks de test ou des extensions personnalisés pour Microsoft.Testing.Platform.

Remarque

Pour obtenir un exemple de code complet, consultez la TestingPlatformExamples dans le référentiel Microsoft Test Framework.

Résumé du point d’extension

Point d’extension Interne/Externe au processus Objectif
ITestFramework En cours La seule extension obligatoire. Découvre et exécute des tests.
IDataConsumer En cours S’abonne aux données de test et les traite à partir du bus de messages.
ITestSessionLifetimeHandler En cours Exécute du code avant et après une session de test.
ITestApplicationLifecycleCallbacks En cours Exécute du code au début et à la fin de l’hôte de test.
ICommandLineOptionsProvider Les deux Ajoute des options de ligne de commande personnalisées.
ITestHostEnvironmentVariableProvider Externe au processus Définit les variables d’environnement avant le démarrage de l’hôte de test.
ITestHostProcessLifetimeHandler Externe au processus Observe le processus hôte de test en externe.

Extensions en cours d'exécution vs hors processus

Les extensions sont classées en deux types :

  • Les extensions in-process s’exécutent à l’intérieur du processus hôte de test, en même temps que l’infrastructure de test. Inscrivez-les via builder.TestHost:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHost.AddXXX(/* ... */);
    
  • Les extensions hors processus s’exécutent dans un processus distinct qui observe l’hôte de test. Inscrivez-les via builder.TestHostControllers:

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

Les extensions hors processus sont nécessaires quand :

  • Vous devez définir des variables d’environnement avant le démarrage de l’hôte de test.
  • Vous devez surveiller l’hôte de test en externe, car le code utilisateur peut se bloquer ou bloquer le processus.

Quand une extension hors processus est inscrite, la plateforme démarre automatiquement un deuxième processus.

L’interface IExtension

Tous les points d’extension héritent de IExtension, qui fournit l’identification et l’opt-in/opt-out :

public interface IExtension
{
    string Uid { get; }
    string Version { get; }
    string DisplayName { get; }
    string Description { get; }
    Task<bool> IsEnabledAsync();
}
  • Uid: identificateur unique de l’extension. Choisissez une valeur unique pour éviter les conflits.
  • Version: version de l’extension, à l’aide du contrôle de version sémantique.
  • DisplayName: nom convivial qui apparaît dans les journaux et --info la sortie.
  • Description: description qui apparaît dans la --info sortie.
  • IsEnabledAsync(): Retirer false pour exclure l’extension de la session. En règle générale, les décisions sont basées sur des options de configuration ou de ligne de commande.
  • Créez une infrastructure de test : créez une implémentation personnalisée ITestFramework , gérez les demandes et signalez les résultats des tests.
  • Construire des extensions : créez des extensions internes au processus et externes au processus telles que les consommateurs de données, les gestionnaires de session et les moniteurs de processus.
  • VSTest Bridge : Simplifiez la migration des frameworks de test VSTest existants vers Microsoft.Testing.Platform.
  • Fonctionnalités : déclarer et interroger des fonctionnalités d’infrastructure et d’extension.
  • Services : Configuration d'accès, journalisation, bus de messages et autres services de plateforme.