Как использовать "--where" параметр в NUnit 3 консоле?

NUnit 3 имеет “–where” параметр, который позволяет выбрать неймспейсы либо же категории тестов для запуска.

Я хочу (но не знаю как) включить в запуск некоторые неймспейсы. У меня есть конкретные примеры, прошу помочь мне с ними разобраться.

Допустим у меня есть:

  1. Project.MainSuite (содержит 1 тест)
  2. Project.MainSuite.Category1 (содержит 2 теста)
  3. Project.MainSuite.Category1.TestSuite1 (содержит 3 теста)

Как запустить следеющие тесты используя параметр --where:

  1. Тесты только из неймспейса Project.MainSuite.Category1 (2 теста должны быть запущены)
  2. Тесты из Project.MainSuite.Category1 и Project.MainSuite.Category1.TestSuite1 вместе (5 тестов должны быть запущены)
  3. Все тесты из Project.MainSuite включаа вложенные неймспейсы (6 тестов должны быть запущены)

Заранее спасибо за помощь.

Привет!
Советую вешать CategoryAttribute на тесты.

А потом указывать к NUnit3 Console какие именно вы хотите запускать.

[Category('1')]
public void Test1()
{ }

[Category('1')]
[Category('2')]
public void Test2()
{ }

[Category('1')]
[Category('2')]
[Category('3')]
public void Test3()
{ }

А потом вызывать в консоли : " where “cat == 1” ", то выполнятся тесты с аттрибутом 1.

Больше информации можно найти тут:

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

1 лайк

Атрибут Category можно вешать и на классы.
По документации не нашёл можно ли в NUnit 3 в --where добавлять неймспейсы.

Можно попробовать так

  1. –where “test == /Project.MainSuite.Category1/”
  2. –where “test =~ /Project.MainSuite.Category1.*/”
  3. –where “test =~ /Project.MainSuite.*/”
1 лайк

Первая опция запустила все тесты из указанной категории + из вложенных категорий. То есть из Project.MainSuite.Category1.TestSuite1 также.

Другие два варианта еще не проверил. Есть еще идеи?)

Что если добавить ещё условие
–where “test == /Project.MainSuite.Category1/ and test != /Project.MainSuite.Category1.TesrSuite1/”

Да, я думаю так получиться, но это плохой вариант в случае если у меня, к пример 10 неймспейсов.

Надо поиграться синтаксисом регулярных выражений. Думаю это вполне реально.
Вас не затруднит расшарить архивчик со структурой проекта.неймспейсов и пустыми тестами?

Спасибо большое что пытаетесь помочь! :slight_smile:
К сожалению расшарить тесты не могу. Но примеры вполне реальны, просто названия другие ну и неймспейсов побольше.

Поигрался тут немного. Похоже на баг в NUnit - он не понимает символа конца строки.
Я взял пять тестов с такими названиями:
NUnit3_Suites.MainSuite.Category1.Categoty1Test.category1_test_1
NUnit3_Suites.MainSuite.Category1.Categoty1Test.category1_test_2
NUnit3_Suites.MainSuite.Category1.TestSuite1.TestSuite1Test.testsuite1_test_1
NUnit3_Suites.MainSuite.Category1.TestSuite1.TestSuite1Test.testsuite1_test_2
NUnit3_Suites.MainSuite.Category1.TestSuite1.TestSuite1Test.testsuite1_test_3

Пытаюсь запустить их так:
nunit3-console.exe NUnit3-Suites.dll --where “test=~/NUnit3_Suites\.MainSuite\.Category1\.\w+\.\w+$”

В результате запускаються все 5, а должны 2 первых.

Проверил регулярное выражение в куче других редакторов - берет только первые две строки. Пишу баг в NUnit.

Рекомендовал бы все тесты раскладывать с одним уровнем вложености. Например если перенести тесты из Project.MainSuite.Category1 в Project.MainSuite.Category1.TestSuite0, то без проблем можно запустить как отдельные сьюты, так и всю категорию даже в текущей версии.

1 лайк

Спасибо большое, поменяю этот как ответ)
Если они баг пофиксят и Вы вдруг вспомните об этой теме, будьте добры, отпишитесь)

На всякий случай скидываю ссылку на зареганую багу NUnit3 Runner skips end of line char in regular expression · Issue #56 · nunit/nunit-console · GitHub.
Но как только будет ясно о вердикте - отпишусь

1 лайк