Использование Microsoft.Testing.Platform с dotnet test
В этой статье описывается, как использовать dotnet test
для выполнения тестов при использовании Microsoft.Testing.Platform
, а также различные параметры, доступные для настройки выходных данных MSBuild, созданных при выполнении тестов через Microsoft.Testing.Platform.
В этой статье показано, как использовать dotnet test
для выполнения всех тестов в решении (*.sln), использующего Microsoft.Testing.Platform
.
интеграция dotnet test
Команда dotnet test — это способ выполнения тестов из решений, проектов или уже созданных сборок.
Microsoft.Testing.Platform подключается к этой инфраструктуре, чтобы обеспечить единый способ выполнения тестов, особенно при миграции из VSTest в Microsoft.Testing.Platform
.
интеграция dotnet test
— режим VSTest
Microsoft.Testing.Platform
предоставляет уровня совместимости (VSTest Bridge) для эффективной работы с dotnet test
.
Тесты можно запустить, выполнив следующие действия:
dotnet test
Этот уровень выполняет тестирование с помощью VSTest и интегрируется с ним на уровне адаптера VSTest Test Framework.
dotnet test
— режим Microsoft.Testing.Platform
По умолчанию dotnet test
использует поведение VSTest для выполнения тестов. Вы можете включить поддержку Microsoft.Testing.Platform
в dotnet test
, указав параметр <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
в файле проекта.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<OutputType>Exe</OutputType>
<EnableMSTestRunner>true</EnableMSTestRunner>
<!-- Add this to your project file. -->
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
</PropertyGroup>
<!-- ... -->
</Project>
Заметка
Настоятельно рекомендуется установить свойство TestingPlatformDotnetTestSupport
в Directory.Build.props
. Таким образом, вам не нужно добавлять его в каждый файл тестового проекта, и вы не рискуете создать новый проект, который не задает это свойство и в итоге получить решение, в котором одни проекты являются VSTest, а другие — Microsoft.Testing.Platform, что может приводить к некорректной работе и является неподдерживаемым сценарием.
Важный
Несмотря на TestingPlatformDotnetTestSupport
true
, большинство параметров командной строки, определенных в dotnet test, остаются ориентированными на VSTest и не оказывают влияния на тесты, основанные на Microsoft.Testing.Platform
. Чтобы указать аргументы для Microsoft.Testing.Platform
, необходимо использовать один из методов, описанных в аргументах командной строки Microsoft.Testing.Platform при помощи команды dotnet test.
В приведенном ниже списке описаны все параметры командной строки dotnet test
, поддерживаемые Microsoft.Testing.Platform
:
-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>
Эти аргументы поддерживаются, так как они связаны с шагом сборки и не зависят от используемой платформы тестирования.
аргументы командной строки Microsoft.Testing.Platform
с dotnet test
Аргументы, используемые для вызова тестового приложения, можно указать одним из следующих способов:
Начиная с
Microsoft.Testing.Platform
версии 1.4 (включенной в MSTest версии 3.6), можно добавить параметры после двойного дефиса--
в командной строке:dotnet test -- --minimum-expected-tests 10
Используя свойство
TestingPlatformCommandLineArguments
MSBuild в командной строке:dotnet test -p:TestingPlatformCommandLineArguments="--minimum-expected-tests 10"
Или в файле проекта:
<PropertyGroup> ... <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments> </PropertyGroup>
Дополнительные параметры MSBuild
Интеграция MSBuild предоставляет параметры, которые можно указать в файле проекта или через глобальные свойства в командной строке, например -p:TestingPlatformShowTestsFailure=true
.
Это доступные варианты:
Показать сбой для каждого теста
По умолчанию тестовые сбои суммируются в файл .log, а в MSBuild сообщается один сбой для каждого тестового проекта.
Чтобы отобразить ошибки для каждого неудачного теста, укажите -p:TestingPlatformShowTestsFailure=true
в командной строке или добавьте свойство <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>
в файл проекта.
В командной строке:
dotnet test -p:TestingPlatformShowTestsFailure=true
Или в файле проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<OutputType>Exe</OutputType>
<EnableMSTestRunner>true</EnableMSTestRunner>
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
<!-- Add this to your project file. -->
<TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>
</PropertyGroup>
<!-- ... -->
</Project>
Показать полные выходные данные платформы
По умолчанию все выходные данные консоли, которые записываются в базовый исполняемый файл теста, фиксируются и скрыты от пользователя. Сюда входят баннер, сведения о версии и отформатированные сведения о тесте.
Чтобы отобразить эти сведения вместе с выходными данными MSBuild, используйте <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>
.
Этот параметр не влияет на то, как платформа тестирования записывает выходные данные пользователей, написанные Console.WriteLine
или другими аналогичными способами записи в консоль.
В командной строке:
dotnet test -p:TestingPlatformCaptureOutput=false
Или в файле проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<OutputType>Exe</OutputType>
<EnableMSTestRunner>true</EnableMSTestRunner>
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
<!-- Add this to your project file. -->
<TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>
</PropertyGroup>
<!-- ... -->
</Project>
Важный
Все приведенные выше примеры добавляют свойства, такие как EnableMSTestRunner
, TestingPlatformDotnetTestSupport
и TestingPlatformCaptureOutput
в csproj-файле. Однако настоятельно рекомендуется задать эти свойства в Directory.Build.props
. Таким образом, вам не нужно добавлять его в каждый файл тестового проекта, и вы не рискуете добавить новый проект, который не задаёт эти свойства, и в конечном итоге не столкнетесь с ситуацией, где некоторые проекты являются VSTest, а другие — Microsoft.Testing.Platform, что может работать неправильно и такая ситуация не поддерживается.