Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся аналитические сведения о команде 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 test
VSTest см. в разделе "Использование Microsoft.Testing.Platform с режимом dotnet test
VSTest".
Дополнительные технические сведения
В 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 после дополнительной--
и задать значениеTestingPlatformDotnetTestSupport
true
. - Параметры командной строки, ориентированные на 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 test
VSTest, существует несколько действий, необходимых для миграции на более новый dotnet test
интерфейс:
- Добавьте
dotnet.config
в корневой каталог репозитория, как показано выше. - Удалите
TestingPlatformDotnetTestSupport
свойство MSBuild, так как оно больше не требуется. - Удалите свойства MSBuild
TestingPlatformCaptureOutput
иTestingPlatformShowTestsFailure
, так как они больше не используются новымdotnet test
. - Удалите дополнительные
--
, например,dotnet test -- --report-trx
должно статьdotnet test --report-trx
. - При передаче определенного решения, например,
dotnet test MySolution.sln
это должно статьdotnet test --solution MySolution.sln
. - При передаче определенного проекта, например,
dotnet test MyProject.csproj
это должно статьdotnet test --project MyProject.csproj
. - При передаче определенного каталога, например,
dotnet test path/to/mydirectory
это должно статьdotnet test --directory path/to/mydirectory
- При передаче определенной библиотеки DLL, например,
dotnet test path/to/UnitTests.dll
, это должно статьdotnet test --test-modules path/to/UnitTests.dll
. Обратите внимание, что--test-modules
также поддерживает глоббинг.