Режим сервера

Режим сервера MTP позволяет редактору, IDE или другому инструменту тестирования запускать тестовое приложение и управлять обнаружением и выполнением через JSON-RPC. Используйте режим сервера при создании инструментов вокруг MTP. Для обычных запусков командной строки и CI запустите тестовое приложение напрямую или используйте dotnet test.

Запустите общедоступный сервер JSON-RPC с --server или --server jsonrpc.

Important

SDK .NET использует отдельный внутренний двоичный протокол через --server dotnettestcli. Не передавайте это значение вручную. dotnet test настраивает аргументы транспорта и протокола.

Использование исходного клиента

Начиная с MTP 2.4.0, пакет Microsoft.Testing.Platform.ServerMode.Client.Sources предоставляет канонический клиент для протокола JSON-RPC. Пакет внедряет источник C# в проект вместо добавления сборки среды выполнения.

Конфигурация только для источника предусматривает следующее:

  • Нет библиотеки DLL среды выполнения или дополнительных зависимостей развертывания.
  • Сериализация, совместимая с Native AOT и не использующая рефлексию.
  • Типы протоколов и код сериализации из того же репозитория, что и сервер MTP.

Внедрённые объекты типа MtpServerClient и IMtpServerClient могут инициализировать соединение, обнаруживать тесты, запускать тесты, запрашивать завершение работы сервера и сообщать об обновлениях тестовых узлов. Типы остаются internal для вашей сборки.

Соответствие требованиям клиента

Используйте C# 12 или более поздней версии. Пакет устанавливает для LangVersion значение 12.0, если в проекте не указана версия языка. Он также предоставляет внутренние типы совместимости для .NET Framework 4.6.2 и netstandard2.0.

Удалите любую рукописную копию клиента MTP перед добавлением пакета, чтобы избежать дублирования внутренних типов.

Выбор поведения подключения

Установите значение MtpServerClientOptions.IsStateful, чтобы указать серверу, сохраняет ли клиент состояние между запросами:

  • Оставьте значение false для одного запроса обнаружения или выполнения, за которым следует выход.
  • Задайте значение true для сеанса редактора или интегрированной среды разработки, который отправляет несколько запросов по одному подключению.

Клиент отправляет этот параметр с помощью возможности экспериментального capabilities.testing.isStateful протокола.

См. также