Сравнение Microsoft.Testing.Platform и VSTest
Microsoft.Testing.Platform
— это упрощенная и переносимая альтернатива VSTest для выполнения тестов в командной строке в конвейерах непрерывной интеграции (CI), в обозревателе тестов Visual Studio и в Visual Studio Code. В этой статье вы узнаете о ключевых различиях между runner 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 основан на пакете NuGet Microsoft.Testing.Platform и других библиотеках в Microsoft.Testing.*
пространстве имен. Как и VSTest, Microsoft.Testing.Platform
является открытым исходным кодом и имеет репозиторий GitHub microsoft/testfx .
Протокол связи (предварительная версия)
Примечание.
Обозреватель тестов Visual Studio поддерживает протокол Microsoft.Testing.Platform в предварительных версиях с 17.10. При выполнении и отладке тестов с помощью более ранних версий Visual Studio обозреватель тестов будет использовать vstest.console.exe
и старый протокол для выполнения этих тестов.
Microsoft.Testing.Platform использует протокол на основе JSON-RPC для обмена данными между Visual Studio и процессом тестового запуска. Протокол задокументирован в репозитории MSTest GitHub.
VSTest также использует протокол связи на основе JSON, но он не основан на JSON-RPC.
Отключение нового протокола
Чтобы отключить использование нового протокола в обозревателе тестов, можно изменить проект, чтобы добавить следующее свойство: <DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>
.
Исполняемые объекты
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, изменения не требуются.