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


Обзор Microsoft.Testing.Platform

Microsoft.Testing.Platform — это упрощенная и переносимая альтернатива VSTest для выполнения тестов во всех контекстах, включая конвейеры непрерывной интеграции (CI), CLI, обозреватель тестов Visual Studio и обозреватель текста VS Code. Платформа Microsoft.Testing.Platform внедрена непосредственно в тестовые проекты, и нет других зависимостей приложений, например vstest.console или dotnet test необходимых для выполнения тестов.

Microsoft.Testing.Platformимеет значение открытый код. Код можно найти Microsoft.Testing.Platform в репозитории microsoft/testfx GitHub.

Основные принципы Microsoft.Testing.Platform

Эта новая платформа тестирования основана на опыте команды .NET Developer Experience Testing и направлена на решение проблем, возникающих с момента выпуска .NET Core в 2016 году. Хотя существует высокий уровень совместимости между платформа .NET Framework и .NET Core/.NET, некоторые ключевые функции, такие как подключаемый модуль и новые возможные форм-факторы компиляций .NET, сделали его сложным для развития или полной поддержки новой функции среды выполнения с текущей архитектурой платформы VSTest.

Основные факторы вождения для эволюции новой платформы тестирования подробно описаны ниже.

  • Детерминированность. Обеспечение выполнения одних и того же теста в разных контекстах (local, CI) приведет к тому же результату. Новая среда выполнения не зависит от отражения или других динамических функций среды выполнения .NET для координации тестового выполнения.

  • Прозрачность среды выполнения. Среда выполнения тестирования не вмешивается в код платформы тестирования, она не создает изолированные контексты, такие как AppDomain или AssemblyLoadContext, и не использует средства разрешения отражения или пользовательских сборок.

  • Регистрация расширений во время компиляции: расширения, такие как платформы тестирования и расширения вне процесса, регистрируются во время компиляции, чтобы обеспечить детерминированность и упростить обнаружение несоответствий.

  • Ноль зависимостей: ядро платформы является одной сборкой .NET, которая не имеет зависимостей, Microsoft.Testing.Platform.dllотличных от поддерживаемых сред выполнения.

  • Размещение: среда выполнения тестирования может размещаться в любом приложении .NET. Хотя консольное приложение обычно используется для выполнения тестов, вы можете создать тестовое приложение в любом типе приложения .NET. Это позволяет выполнять тесты в специальных контекстах, таких как устройства или браузеры, где могут быть ограничения.

  • Поддержка всех форм-факторов .NET: поддержка текущих и будущих форм-факторов .NET, включая собственный AOT.

  • Производительность. Поиск правильного баланса между функциями и точками расширения, чтобы избежать раздувания среды выполнения с использованием нестандартного кода. Новая тестовая платформа предназначена для "оркестрации" тестового запуска, а не предоставления сведений о реализации о том, как это сделать.

  • Расширяемо достаточно: новая платформа основана на точках расширяемости, чтобы обеспечить максимальную настройку выполнения среды выполнения. Он позволяет настроить узел тестового процесса, наблюдать за процессом тестирования и использовать сведения из платформы тестирования в процессе узла тестирования.

  • Развертывание одного модуля: функция размещения позволяет использовать модель развертывания одного модуля, где один результат компиляции можно использовать для поддержки всех точек расширяемости, как вне процесса, так и внутри процесса, без необходимости отправлять разные исполняемые модули.

Поддерживаемые тестовые платформы

  • MSTest. В MSTest поддержка Microsoft.Testing.Platform выполняется с помощью средства запуска MSTest.
  • NUnit. В NUnit поддержка Microsoft.Testing.Platform выполняется через NUnit runner.
  • xUnit.net. В xUnit.net поддержка Microsoft.Testing.Platform выполняется с помощью xUnit.net бегуна.
  • TUnit: полностью построен на основе Microsoft.Testing.Platformдополнительной информации, см . в документации по TUnit.

Выполнение и отладка тестов

Microsoft.Testing.Platform тестовые проекты создаются как исполняемые файлы, которые можно запускать напрямую (или отлаживать). Нет дополнительных тестов, выполняемых в консоли или команде. Приложение выходит из ненулевого кода выхода, если возникает ошибка, как правило, с большинством исполняемых файлов. Дополнительные сведения о известных кодах выхода см. в кодах выхода Microsoft.Testing.Platform.

Внимание

По умолчанию Microsoft.Testing.Platform собирает данные телеметрии. Дополнительные сведения и параметры отказа см. в разделе телеметрии Microsoft.Testing.Platform.

Публикация тестового проекта с помощью dotnet publish и запуск приложения напрямую — это еще один способ выполнения тестов. Например, выполнение ./Contoso.MyTests.exe. В некоторых сценариях также можно использовать dotnet build для создания исполняемого файла, но можно рассмотреть пограничные варианты, такие собственные AOT.

Использование dotnet run

Команду dotnet run можно использовать для сборки и запуска тестового проекта. Это самый простой, хотя иногда самый медленный способ выполнения тестов. Использование dotnet run является практическим при локальном редактировании и выполнении тестов, так как он гарантирует, что тестовый проект перестроен при необходимости. dotnet run также будет автоматически находить проект в текущей папке.

dotnet run --project Contoso.MyTests

Дополнительные сведения см. в dotnet runразделе dotnet run.

Использование dotnet exec

dotnet Команда dotnet exec используется для выполнения (или запуска) уже созданного тестового проекта, это альтернатива запуску приложения напрямую. dotnet exec требуется путь к библиотеке dll встроенного тестового проекта.

dotnet exec Contoso.MyTests.dll

or

dotnet Contoso.MyTests.dll

Примечание.

Предоставление пути к исполняемому файлу тестового проекта (*.exe) приводит к ошибке:

Error:
  An assembly specified in the application dependencies manifest
  (Contoso.MyTests.deps.json) has already been found but with a different
  file extension:
    package: 'Contoso.MyTests', version: '1.0.0'
    path: 'Contoso.MyTests.dll'
    previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'

Дополнительные сведения см. в dotnet execdotnet exec.

Использование dotnet test

Microsoft.Testing.Platform предлагает уровень совместимости и vstest.console.exe dotnet test обеспечивает выполнение тестов, как и раньше, при включении нового сценария выполнения.

dotnet test Contoso.MyTests.dll

Параметры

В приведенном ниже списке описаны только параметры платформы. Чтобы просмотреть определенные параметры, представленные каждым расширением, перейдите на страницу документации по расширению или используйте --help этот параметр.

  • --diagnostic

Включает ведение журнала диагностики. Уровень журнала по умолчанию .Trace Файл записывается в выходной каталог со следующим форматом имени. log_[MMddHHssfff].diag

  • --diagnostic-filelogger-synchronouswrite

Позволяет встроенному средству ведения журнала файлов синхронно записывать журналы. Полезно для сценариев, когда вы не хотите терять записи журнала (если процесс завершается сбоем). Это замедляет выполнение теста.

  • --diagnostic-output-directory

Выходной каталог журнала диагностики, если файл не указан в каталоге TestResults по умолчанию.

  • --diagnostic-output-fileprefix

Префикс имени файла журнала. По умолчанию — "log_".

  • --diagnostic-verbosity

Определяет уровень детализации при использовании коммутатора --diagnostic . Доступные значения: Trace, Debug, Information, WarningErrorили Critical.

  • --help

Выводит описание использования команды.

  • -ignore-exit-code

Позволяет игнорировать некоторые коды выхода, отличные от нуля, и вместо этого возвращается как 0. Дополнительные сведения см. в разделе "Игнорировать определенные коды выхода".

  • --info

Отображает дополнительные сведения о тестовом приложении .NET, например:

  • Платформа.
  • Среда.
  • Каждый зарегистрированный поставщик командной строки, например его, name, description versionи options.
  • Каждый зарегистрированный инструмент, например его, command, name, version, descriptionи все поставщики командной строки.

Эта функция используется для понимания расширений, которые регистрируют один и тот же параметр командной строки или изменения доступных параметров между несколькими версиями расширения (или платформой).

  • --list-tests

Список доступных тестов. Тесты не будут выполняться.

  • --minimum-expected-tests

Указывает минимальное количество тестов, которые должны выполняться. По умолчанию ожидается выполнение хотя бы одного теста.

  • --results-directory

Каталог для сохранения результатов тестов. Если указанный каталог не существует, он создается. По умолчанию используется TestResults каталог, содержащий тестовое приложение.

Интеграция MSBuild

Пакет NuGet Microsoft.Testing.Platform.MSBuild предоставляет различные интеграции с Microsoft.Testing.Platform MSBuild:

  • Поддержка dotnet test. Дополнительные сведения см. в статье dotnet test integration.
  • Поддержка необходимых ProjectCapability Visual Studio обозревателям тестов и Visual Studio Code их поддержке.
  • Автоматическое создание точки входа (Main метода).
  • Автоматическое создание файла конфигурации.

Примечание.

Эта интеграция работает транзитивно (проект, ссылающийся на другой проект, ссылающийся на этот пакет, будет вести себя так, как если он ссылается на пакет) и может быть отключен через IsTestingPlatformApplication свойство MSBuild.

См. также