NUnit 3 состоит из трёх отдельных слоёв: Framework, Engine и Console Runner. Исходный код хранится в двух репозиториях GitHub: https://github.com/nunit/nunit и https://github.com/nunit/nunit-console.
У вас не будет разрешения на создание веток непосредственно в любом из указанных выше репозиториев, поэтому вам нужно будет работать над локальным форком.
Процесс разработки для внесения изменений в код и отправки запросов на вытягивание (PR) выглядит следующим образом:
Существует одно решение Visual Studio, nunit.sln, которое находится в корне репозитория NUnit.
Фреймворк NUnit можно собрать из этого решения с помощью IDE, совместимой с .NET 6, такой как:
На всех платформах вам потребуется установить .NET 6.0 SDK или более новую версию.
В macOS или Linux вам потребуется установить Mono, открытую реализацию Microsoft .NET Framework. Версия Mono 6.12.0 Stable (6.12.0.122) была проверена для создания решения NUnit в GNU/Linux Debian 10 'buster'.
Сборка решения помещает все свои выходные данные в общий каталог bin под каталогом решения.
Поскольку решение NUnit нацелено на несколько фреймворков, одна сборка создаст файлы для каждого целевого фреймворка. Например, отладочная сборка создаёт следующую структуру каталогов:
(каталог с nunit.sln)
bin\
Debug\
net8.0
net6.0
net462
Тесты, которые должны быть запущены в решении, сгруппированы по названию проекта:
Другие тестовые проекты содержат тесты, предназначенные для преднамеренного сбоя для интеграционных тестов.
Затем вы сможете запустить модульные тесты прямо из выбранной вами среды разработки против одной или всех целевых платформ (как при использовании NUnit в любом другом проекте разработки). Например, вот как это выглядит в JetBrains Rider (2021.1.2), когда вы щёлкаете правой кнопкой мыши на TextFixture AssertEqualsTests:
К сожалению, в настоящее время существуют некоторые известные проблемы со сборкой и запуском тестов локально.
Вы можете запустить NUnit Lite аналогичным образом, но из среды разработки после успешной сборки.
Вероятно, это самый простой способ (пока проблема #3008 остаётся открытой) для разработчиков пошагово выполнять код и отлаживать любые новые вклады в кодовую базу.
Убедитесь, что в вашей среде разработки есть конфигурация запуска/отладки, которая указывает nunitlite-runner в качестве запускаемого проекта.
Затем укажите аргументы программы точно так же, как указано выше. Например, следующий аргумент nunit.framework.tests.dll --where "class == NUnit.Framework.Assertions.AssertEqualsTests" запустит все тесты в TextFixture NUnit.Framework.Assertions.AssertEqualsTests в nunit.framework.tests.dll. Построение скрипта
Мы используем Cake для сборки NUnit для распространения. Основной скрипт, который управляет сборкой, запуском тестов и упаковкой — это build.cake
. Мы модифицируем build.cake
, когда нам нужно добавить новые цели или изменить способ сборки. Обычно build.cake
вызывается не напрямую, а через build.ps1
(PowerShell в Windows) или build.sh
(bash в Linux). Эти два скрипта предоставляются проектом Cake и обеспечивают правильную установку Cake перед попыткой запуска скрипта cake.
Ключевые аргументы для build.ps1
/ build.sh
:
Аргумент | Описание |
---|---|
--target={task} | Задача для выполнения — см. ниже. |
--configuration=[Release|Debug] | Конфигурация для использования (по умолчанию используется Release) |
--showdescription | Показывает все задачи сборки и их описания |
Скрипт build.cake содержит большое количество взаимосвязанных задач. Наиболее важные задачи верхнего уровня перечислены здесь:
Задача | Описание |
---|---|
Build | Строит всё. Это значение по умолчанию, если цель не указана. |
Rebuild | Очищает выходной каталог и строит всё |
Test | Запускает все тесты. Зависит от Build. |
Package | Создаёт все пакеты без предварительной сборки. См. примечание ниже. |
Например, следующая команда .\build.ps1 --target=Test --configuration=Release
(PowerShell на Windows) выполнит полную сборку релиза для всех целевых фреймворков, а затем выполнит модульные тесты для каждой цели.
Для получения полного списка задач запустите .\build.ps1 --showdescription
(PowerShell на Windows) или ./build.sh --showdescription
(bash на Linux).
build.cake
.Определённые константы
NUnit часто использует условный препроцессор для включения API и поведения на разных платформах.
В целом, старайтесь использовать константы функций, а не константы платформы. Это вносит ясность в код и упрощает изменение сопоставления между функциями и платформами.
Константы функций определены в Directory.Build.props:
THREAD_ABORT
включает тайм-ауты и принудительное прерывание.Константы платформы определяются условно SDK csproj, по одной для каждого целевого фреймворка. Например, NET462
, NETSTANDARD2_0
, NET6_0
и так далее. В данном сценарии наиболее полезно указать, какие платформы являются исключением, а не правилом. Помните о влиянии, которое препроцессор окажет на вновь добавленную платформу.
Например, вместо этого кода:
#if NETSTANDARD2_0 || NET6_0
// Something that .NET Framework can't do
#endif
Рассмотрите это:
#if !NETFRAMEWORK
// Something that .NET Framework can't do
#endif
Или это для обратного:
#if NETFRAMEWORK
// Something that only .NET Framework can do
#endif
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )