Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этой статье приводятся аналитические сведения о команде 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. В MTP 1.9 предупреждение с кодом MTP0001 создается при обнаружении аргумента, который автоматически игнорируется.
Примечание.
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 при запуске с пакетом SDK для .NET 10. Поддержка остается доступной для пакета SDK для .NET 9 и более ранних версий для обеспечения обратной совместимости.
Дополнительные сведения см. в разделе "Миграция на режим 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.
Чтобы включить этот режим, добавьте в файл следующую конфигурацию global.json :
{
"test": {
"runner": "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 интерфейс:
- Добавьте
testраздел вglobal.jsonфайл, как показано выше. - Удалите
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. - При передаче определенной библиотеки DLL, например,
dotnet test path/to/UnitTests.dll, это должно статьdotnet test --test-modules path/to/UnitTests.dll. Обратите внимание, что--test-modulesтакже поддерживает глоббинг.