Как запустить все тесты, принадлежащие определенной категории в JUnit 4

JUnit 4.8 содержит хорошую новую возможность под названием "Категории", которая позволяет Вам собирать в группу определенные виды тестов. Это очень полезно, например, иметь отдельные тестовые прогоны для медленных и быстрых тестов. Я знаю материал, упомянутый в информации о версии JUnit 4.8, но хотел бы знать, как я могу на самом деле запустить все тесты, аннотируемые определенной категорией.

Информация о версии JUnit 4.8 показывает определение комплекта в качестве примера, где аннотация SuiteClasses выбирает тесты из определенной категории для выполнения, как это:

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
  // Will run A.b and B.c, but not A.a
}

Кто-либо знает, как я мог запустить все тесты в категории SlowTests? Кажется, что у Вас должна быть аннотация SuiteClasses...

71
задан Peter Isberg 17 July 2014 в 09:29
поделиться

3 ответа

См. эту статью о ProductCode и PackageCode: http://www.simple-talk.com/dotnet/visual-studio/updates-to-setup-projects/

В ней объясняется, как ProductCode и PackageCode взаимодействуют во время установки и как настроить проект установки для правильного применения .msi в качестве обновления.

-121--4501564-

Нет в поле, только IEnumerable < T > предоставит его, не открывая Add и Remove public methods, которые могут заставить клиента получить исключение во время выполнения.

Если вы хотите, чтобы ваш открытый API явно указал, что коллекция доступна только для чтения и вам нужен индексатор, вам придется написать собственную обертку вокруг существующего списка < T > или T [] .

-121--1524250-

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

Я определяю тестовый номер люкс для медленных тестов следующим образом:

@RunWith(Categories.class)
@Categories.IncludeCategory(SlowTests.class)
@Suite.SuiteClasses( { AllTests.class })
public class SlowTestSuite {
}

класс AllTests определяется следующим образом:

@RunWith(ClasspathSuite.class)
public class AllTests {
}

Мне пришлось использовать класс ClassGroupSuite из проекта ClassGroupSuite здесь. Он найдет все классы с тестами.

60
ответ дан 24 November 2019 в 13:08
поделиться

Я не уверен, в чем именно ваша проблема.

Просто добавьте все тесты в номер (или хиракия номеров). Затем используйте аннотацию Categories Runner и Include/ExcludeCategory, чтобы указать категории, которые вы хотите запустить.

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

1
ответ дан 24 November 2019 в 13:08
поделиться

Не является прямым ответом на вашу проблему, но, возможно, общий подход можно было бы усовершенствовать...

Почему ваши тесты медленные? Может быть, установка длится долго (база данных, входы/выходы и т.д.), может быть, тесты слишком много тестируют? Если это так, то я бы отделил реальные юнит-тесты от "длительных", которые зачастую действительно являются интеграционными тестами.

В моих установках есть инсценировка env, где юнит-тесты выполняются часто, а интеграционные тесты - постоянно, но реже (например, после каждого коммита в контроле версий). Я никогда не работал с группировкой юнит-тестов, потому что они должны быть свободно соединены. Я работаю только с группировкой и связью тестовых кейсов в интеграционно-тестовых установках (но с TestNG).

Но приятно знать, что в JUnit 4.8 появились некоторые возможности группировки.

0
ответ дан 24 November 2019 в 13:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: