Сравнение Microsoft.Testing.Platform и VSTest
Microsoft.Testing.Platform
— это упрощенная и переносимая альтернатива VSTest для выполнения тестов в командной строке, в конвейерах непрерывной интеграции (CI) в обозревателе тестов Visual Studio и Visual Studio Code. В этой статье вы узнаете о ключевых различиях между тестировщиком MSTest и VSTest.
Различия в выполнении теста
Тесты выполняются различными способами в зависимости от тестового исполнителя.
Выполнение тестов VSTest
VSTest поставляется с Visual Studio, SDK для .NET и как автономный инструмент в пакете NuGet Microsoft.TestPlatform. VSTest использует исполняемый файл runner для выполнения тестов с именем vstest.console.exe
, который можно использовать непосредственно или через dotnet test
.
Выполнение тестов Microsoft.Testing.Platform
Microsoft.Testing.Platform внедряется непосредственно в тестовый проект и не отправляет дополнительные исполняемые файлы. При запуске программы вашего проекта выполняются тесты. Дополнительные сведения о выполнении тестов Microsoft.Testing.Platform см. в обзоре Microsoft.Testing.Platform: запуск и отладка тестов.
Пространства имен и пакеты NuGet
Чтобы ознакомиться с Microsoft.Testing.Platform
и VSTest, полезно понять пространства имен и пакеты NuGet, используемые каждым из них.
Пространства имен VSTest
VSTest — это коллекция средств тестирования, которые также называются платформой тестирования. Исходный код VSTest является открытым исходным кодом и доступен в репозитории microsoft/vstest GitHub. Код использует пространство имен Microsoft.TestPlatform.*
.
VSTest является расширяемым, а распространенные типы помещаются в пакет NuGet Microsoft.TestPlatform.ObjectModel.
Пространства имен Microsoft.Testing.Platform
Microsoft.Testing.Platform основан на пакете Microsoft.Testing.Platform NuGet и других библиотеках в пространстве имен Microsoft.Testing.*
. Как и VSTest, Microsoft.Testing.Platform
является открытым исходным кодом и имеет репозиторий microsoft/testfx GitHub.
Протокол связи
Заметка
Обозреватель тестов Visual Studio поддерживает протокол Microsoft.Testing.Platform начиная с 17.12. При выполнении и отладке тестов с помощью более ранних версий Visual Studio обозреватель тестов будет использовать vstest.console.exe
и старый протокол для выполнения этих тестов.
Microsoft.Testing.Platform использует протокол на основе JSON-RPC для обмена данными между Visual Studio и процессом тестового запуска. Протокол задокументирован в репозитории MSTest GitHub.
VSTest также использует протокол связи на основе JSON, но он не основан на JSON-RPC.
Отключение нового протокола
Чтобы отключить использование нового протокола в обозревателе тестов, можно изменить проект, чтобы добавить следующее свойство: <DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>
.
Вы также можете перейти к параметрам предварительных версий функций в Visual Studio и отменить выбор параметра "Использовать режим сервера платформы тестирования".
Исполняемые файлы
VSTest поставляет несколько исполняемых файлов, в частности vstest.console.exe
, testhost.exe
и datacollector.exe
. Однако MSTest внедряется непосредственно в тестовый проект и не отправляет другие исполняемые файлы. Исполняемый файл вашего тестового проекта используется для запуска всех средств тестирования и выполнения всех задач, необходимых для проведения тестов.
Миграция из VSTest
Помимо шагов, относящихся к тестовой платформе, необходимо обновить тестовую инфраструктуру, чтобы адаптировать её для Microsoft.Testing.Platform
.
dotnet test
Параметры командной строки dotnet test
разделены на 2 категории: аргументы, связанные со сборкой, и аргументы, связанные с тестами.
Аргументы, связанные со сборкой, передаются в команду dotnet build
и поэтому не нужно обновлять для новой платформы. Ниже перечислены связанные аргументы сборки:
-a|--arch <ARCHITECTURE>
--artifacts-path <ARTIFACTS_DIR>
-c|--configuration <CONFIGURATION>
-f|--framework <FRAMEWORK>
-e|--environment <NAME="VALUE">
--interactive
--no-build
--nologo
--no-restore
-o|--output <OUTPUT_DIRECTORY>
--os <OS>
-r|--runtime <RUNTIME_IDENTIFIER>
-v|--verbosity <LEVEL>
Тестовые аргументы специфичны для VSTest, поэтому их необходимо преобразовать, чтобы они соответствовали новой платформе. В следующей таблице показано сопоставление аргументов VSTest и новой платформы:
Аргумент VSTest | Новый аргумент платформы |
---|---|
--test-adapter-path <ADAPTER_PATH> |
Не поддерживается |
--blame |
Не поддерживается |
--blame-crash |
--crashdump требует расширения дампа аварийного сбоя |
--blame-crash-dump-type <DUMP_TYPE> |
--crashdump-type требует расширения дампа аварийного сбоя |
--blame-crash-collect-always |
Не поддерживается |
--blame-hang |
--hangdump требует расширения дампа зависания для |
--blame-hang-dump-type <DUMP_TYPE> |
--hangdump-type требуется расширение дампа памяти при зависании |
--blame-hang-timeout <TIMESPAN> |
--hangdump-timeout требуется расширение дампа зависания |
--collect <DATA_COLLECTOR_NAME> |
Зависит от сборщика данных |
-d\|--diag <LOG_FILE> |
--diagnostic |
--filter <EXPRESSION> |
Зависит от выбранной платформы тестирования |
-l\|--logger <LOGGER> |
Зависит от логгера |
--results-directory <RESULTS_DIR> |
--results-directory <RESULTS_DIR> |
-s\|--settings <SETTINGS_FILE> |
Зависит от выбранной платформы тестирования |
-t\|--list-tests |
--list-tests |
-- <RunSettings arguments> |
Не поддерживается |
Важный
Перед указанием аргументов Microsoft.Testing.Platform
необходимо добавить --
, чтобы разделить аргументы dotnet test
от новых аргументов платформы. Например, dotnet test --no-build -- --list-tests
.
vstest.console.exe
Если вы используете vstest.console.exe
напрямую, рекомендуется заменить его командой dotnet test
.
Обозреватель тестов
При использовании Обозревателя тестов Visual Studio или Visual Studio Code может потребоваться включить поддержку новой тестовой платформы.
Visual Studio
Visual Studio Test Explorer поддерживает новую тестовую платформу, начиная с версии 17.14. Если вы используете более раннюю версию, может потребоваться обновить Visual Studio до последней версии.
Visual Studio Code
Обозреватель тестов Visual Studio Code поддерживает новую платформу тестирования, начиная с версии X.
Azure DevOps
При использовании задач Azure DevOps может потребоваться обновить конвейер, чтобы использовать новую тестовую платформу.
Задача VSTest
Если вы используете задачу VSTest в Azure DevOps, ее можно заменить задачей .NET Core.
Задача .NET Core
Если вы используете задачу .NET Core , изменения не требуются.