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


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