Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Режим сервера MTP позволяет редактору, IDE или другому инструменту тестирования запускать тестовое приложение и управлять обнаружением и выполнением через JSON-RPC. Используйте режим сервера при создании инструментов вокруг MTP. Для обычных запусков командной строки и CI запустите тестовое приложение напрямую или используйте dotnet test.
Запустите общедоступный сервер JSON-RPC с --server или --server jsonrpc.
Important
SDK .NET использует отдельный внутренний двоичный протокол через --server dotnettestcli. Не передавайте это значение вручную.
dotnet test настраивает аргументы транспорта и протокола.
Использование исходного клиента
Предварительная версия MTP 2.4 предоставляет канонический JSON-RPC клиент. Добавьте пакет Microsoft.Testing.Platform.ServerMode.Client.Sources. Пакет внедряет источник C# в проект вместо добавления сборки среды выполнения.
Конфигурация только для источника предусматривает следующее:
- Нет библиотеки DLL среды выполнения или дополнительных зависимостей развертывания.
- Сериализация, совместимая с Native AOT и не использующая рефлексию.
- Типы протоколов и код сериализации из того же репозитория, что и сервер MTP.
Внедрённые MtpServerClient, IMtpServerClient и типы протоколов могут инициализировать подключение, обнаруживать тесты, выполнять тесты, запрашивать завершение работы сервера и сообщать об обновлениях тестовых узлов. Все внедренные типы остаются internal в потребляющей сборке.
Соответствие требованиям клиента
Используйте C# 12 или более поздней версии. Пакет устанавливает для LangVersion значение 12.0, если в проекте не указана версия языка. Он также предоставляет внутренние типы совместимости для .NET Framework 4.6.2 и netstandard2.0.
Удалите любую рукописную копию клиента MTP перед добавлением пакета, чтобы избежать дублирования внутренних типов.
Выбор модели запуска
Чтобы запустить тестовое приложение как внешний процесс, используйте MtpServerClient.LaunchAsync. Клиент отвечает за этот дочерний процесс и завершает его при завершении работы, если это необходимо.
Если встроенный хост или среда UI-потока не могут использовать Process.Start, используйте MtpServerClient.LaunchInProcessAsync. Метод запускает тестовое приложение с помощью асинхронного обратного вызова в текущем процессе. Не блокируйте поток запуска, так как обратный вызов и клиент совместно используют этот процесс.
Обе модели запуска используют транспорт TCP обратного цикла. Браузер WebAssembly не может создать необходимый прослушиватель, поэтому запуск в процессе вызывает.PlatformNotSupportedException Внутрипроцессный запуск не поддерживает альтернативный транспорт для WebAssembly.
Завершение работы клиента
Чтобы завершить работу клиента и запущенного приложения, не блокируя вызывающий поток, вызовите IMtpServerClient.ShutdownAsync(). Асинхронный метод позволяет избежать проблем с отзывчивостью потока пользовательского интерфейса и взаимных блокировок во встроенных хостах.
Для внутрипроцессного узла MtpServerClientOptions.ServerShutdownTimeout определяет, сколько времени завершение работы ожидает после того, как клиент закрывает транспорт. Значение по умолчанию — 30 секунд. Прочитайте ServerExitCode после завершения работы, чтобы получить код выхода обратного вызова. Значение остается null во время выполнения приложения или при сбое приложения вместо возврата кода выхода.
Выбор поведения подключения
Установите значение MtpServerClientOptions.IsStateful, чтобы указать серверу, сохраняет ли клиент состояние между запросами:
- Оставьте значение
falseдля одного запроса обнаружения или выполнения, за которым следует выход. - Задайте значение
trueдля сеанса редактора или интегрированной среды разработки, который отправляет несколько запросов по одному подключению.
Клиент отправляет этот параметр с помощью возможности экспериментального capabilities.testing.isStateful протокола.