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


Использование 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, что может приводить к некорректной работе и является неподдерживаемым сценарием.

Важный

Несмотря на TestingPlatformDotnetTestSupporttrue, большинство параметров командной строки, определенных в 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, что может работать неправильно и такая ситуация не поддерживается.