Бөлісу құралы:


Создание пользовательских расширений

Эта статья предназначена для разработчиков, создающих пользовательские тестовые фреймворки или расширения для Microsoft.Testing.Platform.

Заметка

Полный пример кода см. в TestingPlatformExamples в репозитории Microsoft Test Framework.

Сводка точки расширения

Точка расширения Вход и выход из процесса Цель
ITestFramework В процессе Единственное обязательное расширение. Обнаруживает и выполняет тесты.
IDataConsumer В процессе Подписывается на и обрабатывает тестовые данные из шины сообщений.
ITestSessionLifetimeHandler В процессе Выполняет код до и после тестового сеанса.
ITestApplicationLifecycleCallbacks В процессе Выполняет код в самом начале и самом конце тестового узла.
ICommandLineOptionsProvider Both Добавляет настраиваемые параметры командной строки.
ITestHostEnvironmentVariableProvider Внепроцессный Задает переменные среды перед запуском тестового узла.
ITestHostProcessLifetimeHandler Внепроцессный Наблюдает за внешним процессом узла тестирования.

Расширения в процессе и расширения вне процесса

Расширения классифицируются по двум типам:

  • Внутрипроцессные расширения запускаются в процессе хоста тестирования вместе с платформой тестирования. Зарегистрируйте их с помощью builder.TestHost:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHost.AddXXX(/* ... */);
    
  • Расширения вне процесса выполняются в отдельном процессе, который наблюдает за узлом тестирования. Зарегистрируйте их с помощью builder.TestHostControllers:

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

Внепроцессные расширения необходимы, когда:

  • Перед запуском тестового узла необходимо задать переменные среды.
  • Необходимо отслеживать тестовый узел вневне, так как пользовательский код может завершиться сбоем или зависнуть в процессе.

При регистрации любого внепроцессного расширения платформа автоматически запускает второй процесс.

Интерфейс IExtension

Все точки расширения наследуют от IExtension, который предоставляет идентификацию и возможность включения/отключения.

public interface IExtension
{
    string Uid { get; }
    string Version { get; }
    string DisplayName { get; }
    string Description { get; }
    Task<bool> IsEnabledAsync();
}
  • Uid: уникальный идентификатор расширения. Выберите уникальное значение, чтобы избежать конфликтов.
  • Version: версия расширения с использованием семантического управления версиями.
  • DisplayName: понятное имя, которое отображается в журналах и --info выходных данных.
  • Description: описание, отображаемое в --info выходных данных.
  • IsEnabledAsync(): верните false, чтобы исключить расширение из сеанса. Обычно решения основаны на параметрах конфигурации или командной строки.
  • Создание платформы тестирования: создание пользовательской ITestFramework реализации, обработка запросов и отчет о результатах теста.
  • Создание расширений: создание внутрипроцессных и внепроцессных расширений, таких как потребители данных, обработчики сеансов и мониторы процессов.
  • VSTest Bridge: упрощение миграции существующих платформ тестов на основе VSTest на Microsoft.Testing.Platform.
  • Возможности: объявление и запрос возможностей платформы и расширений.
  • Services: Доступ к настройкам конфигурации, ведению журнала, шине сообщений и другим службам платформы.