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


Тестирование с помощью dotnet test

В этой статье приводятся аналитические сведения о команде dotnet test CLI, включая совместимость в рамках истории с VSTest и Microsoft.Testing.Platform (MTP).

Команда dotnet test работает в двух основных режимах:

  • Режим VSTest: это режим по умолчанию dotnet test и единственный режим, доступный до пакета SDK для .NET 10. Он предназначен в основном для VSTest, но также может запускать тест Microsoft.Testing.Platform с помощью пакета NuGet Microsoft.Testing.Platform.MSBuild.
  • Режим Microsoft.Testing.Platform: представлен с пакетом SDK для .NET 10, этот режим поддерживает исключительно тестовые приложения, созданные с помощью Microsoft.Testing.Platform.

Подсказка

Для справки по CLI см. dotnet test.

Режим VSTest dotnet test

В течение длительного времени VSTest была единственной тестовой платформой в .NET. Следовательно, dotnet test был разработан исключительно для VSTest, с всеми параметрами командной строки, адаптированными к VSTest.

Процесс включает вызов цели MSBuild VSTest, которая активирует другие внутренние цели для запуска и в конечном итоге запускает vstest.console. Все dotnet test параметры командной строки переводятся в эквиваленты в vstest.console.

Запуск проектов MTP с помощью режима VSTest

dotnet test предназначен для запуска проектов VSTest в режиме VSTest. Однако проекты MTP можно запускать в dotnet test режиме VSTest с помощью пакета Microsoft.Testing.Platform.MSBuild . С точки зрения пользователя, эта поддержка включена, установив значение TestingPlatformDotnetTestSupport для свойства MSBuild true (по умолчанию это false по причинам обратной совместимости). Если для этого свойства задано trueзначение , Microsoft.Testing.Platform.MSBuild изменяет целевое VSTest поведение, перенаправляя его на вызов InvokeTestingPlatform. InvokeTestingPlatform — это целевой объект MSBuild, включенный в Microsoft.Testing.Platform.MSBuild, который отвечает за правильное выполнение тестовых приложений MTP в качестве исполняемых файлов. Параметры командной строки, относящиеся к VSTest, такие как --logger, автоматически игнорируются в этом режиме. Чтобы включить аргументы, относящиеся к MTP, например --report-trx, их необходимо добавить после дополнительного --. Например: dotnet test -- --report-trx.

Примечание.

MSTest и NUnit используют пакет Microsoft.Testing.Extensions.VSTestBridge . Настроив EnableMSTestRunner или EnableNUnitRunner (включив Microsoft.Testing.Platform), ваш тестовый проект будет поддерживать как VSTest, так и Microsoft.Testing.Platform. В этом сценарии, если вы используете режим dotnet test VSTest и не установите значение true для TestingPlatformDotnetTestSupport, вы фактически работаете полностью с VSTest, как если бы значения true не были установлены для EnableMSTestRunner и EnableNUnitRunner.

Примечание.

Настоятельно рекомендуется задать TestingPlatformDotnetTestSupport свойство в Directory.Build.props. Это гарантирует, что вам не нужно добавлять его в каждый файл тестового проекта по отдельности. Кроме того, он предотвращает внедрение нового тестового проекта, который не задает это свойство, что может привести к решению, в котором некоторые проекты используют VSTest, а другие используют Microsoft.Testing.Platform. Эта смешанная конфигурация может работать неправильно и является неподдерживаемой ситуацией.

Это важно

Запуск проектов MTP в режиме VSTest считается устаревшим в пользу более нового интерфейса в пакете SDK для .NET 10. Поддержка выполнения в этом режиме будет удалена в Microsoft.Testing.Platform версии 2. Дополнительные сведения см. в разделе "Миграция на режим MTP dotnet test".

В следующем списке описаны параметры командной dotnet test строки команды в режиме VSTest, поддерживаемые Microsoft.Testing.Platform. Эти параметры относятся к процессу сборки и не передаются в VSTest, поэтому они работают с MTP.

  • -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>

Подсказка

Аргументы командной строки тестового приложения можно настроить с помощью TestingPlatformCommandLineArguments свойства MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Дополнительные сведения о выполнении проектов MTP в режиме dotnet testVSTest см. в разделе "Использование Microsoft.Testing.Platform с режимом dotnet testVSTest".

Дополнительные технические сведения

В dotnet test режиме VSTest используется -- для указания аргументов RunSettings. Изначально dotnet test предназначалось для передачи этих аргументов в качестве свойства MSBuild, которое называется VSTestCLIRunSettings. Таким образом, при выполнении тестовых приложений MTP в VSTest режиме мы переопределяем значение VSTestCLIRunSettings для представления аргументов приложения.

Сочетание VSTest и Microsoft.Testing.Platform (MTP)

При запуске dotnet test в режиме VSTest рекомендуется избегать одновременного включения VSTest и Microsoft.Testing.Platform в одном решении.

Этот сценарий официально не поддерживается, и следует учитывать следующее:

  • Параметры командной строки, относящиеся к VSTest, будут применяться только к проектам VSTest, а не к тестовых приложениям MTP.
  • Параметры командной строки, относящиеся к MTP, указанные после #D0, будут рассматриваться как аргументы RunSettings для проектов VSTest.

Основные выводы

  • Чтобы запустить тестовые приложения MTP в dotnet test режиме VSTest, следует использовать Microsoft.Testing.Platform.MSBuild, передать параметры командной строки для конкретной модели MTP после дополнительной --и задать значение TestingPlatformDotnetTestSupporttrue.
  • Параметры командной строки, ориентированные на VSTest, игнорируются автоматически.

Из-за этих проблем .NET ввел новый dotnet test режим, специально разработанный для MTP. Мы рекомендуем пользователям MTP перейти с режима VSTest dotnet test на новый режим, используя SDK для .NET 10.

Режим Microsoft.Testing.Platform (MTP) dotnet test

Чтобы устранить проблемы, возникающие при запуске dotnet test с помощью MTP в режиме VSTest, .NET представила новый режим в пакете SDK для .NET 10, который специально предназначен для MTP.

Чтобы включить этот режим, добавьте dotnet.config файл в корневой каталог репозитория или решения.

[dotnet.test.runner]
name = "Microsoft.Testing.Platform"

Это важно

Интерфейс dotnet test MTP поддерживается только в Microsoft.Testing.Platform версии 1.7 и более поздних версиях.

Так как этот режим специально предназначен для Microsoft.Testing.Platform, ни TestingPlatformDotnetTestSupport, ни дополнительный -- не требуются.

Это важно

Этот режим совместим только с Microsoft.Testing.Platform версии 1.7.0 и более поздними версиями.

Это важно

Если тестовый проект поддерживает VSTest, но не поддерживает MTP, будет создана ошибка.

Подсказка

Аргументы командной строки тестового приложения можно настроить с помощью TestingPlatformCommandLineArguments свойства MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Перейдите в режим MTP dotnet test

Для пользователей MTP, использующих режим dotnet testVSTest, существует несколько действий, необходимых для миграции на более новый dotnet test интерфейс:

  1. Добавьте dotnet.config в корневой каталог репозитория, как показано выше.
  2. Удалите TestingPlatformDotnetTestSupport свойство MSBuild, так как оно больше не требуется.
  3. Удалите свойства MSBuild TestingPlatformCaptureOutput и TestingPlatformShowTestsFailure, так как они больше не используются новым dotnet test.
  4. Удалите дополнительные --, например, dotnet test -- --report-trx должно стать dotnet test --report-trx.
  5. При передаче определенного решения, например, dotnet test MySolution.slnэто должно стать dotnet test --solution MySolution.sln.
  6. При передаче определенного проекта, например, dotnet test MyProject.csprojэто должно стать dotnet test --project MyProject.csproj.
  7. При передаче определенного каталога, например, dotnet test path/to/mydirectoryэто должно стать dotnet test --directory path/to/mydirectory
  8. При передаче определенной библиотеки DLL, например, dotnet test path/to/UnitTests.dll, это должно стать dotnet test --test-modules path/to/UnitTests.dll. Обратите внимание, что --test-modules также поддерживает глоббинг.