Обзор 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 exec
dotnet 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
, Warning
Error
или 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.