Поделиться через


Сравнение 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, изменения не требуются.