Наборы тестов JUnit 4


100

Как создать наборы тестов с помощью JUnit 4?

Похоже, что вся документация, которую я видел, мне не подходит. И если я использую мастер Eclipse, он не дает мне возможности выбрать какой-либо из созданных мной тестовых классов.


4
В Eclipse 3.7 Indigo мастер набора тестов теперь поддерживает JUnit 4
Фабиан Стиг

Ответы:


148
import org.junit.runners.Suite;
import org.junit.runner.RunWith;

@RunWith(Suite.class)
@Suite.SuiteClasses({TestClass1.class, TestClass2.class})
public class TestSuite {
  //nothing
}

61

Вы можете создать подобный набор. Например, AllTestпакет будет выглядеть примерно так.

package my.package.tests;

@RunWith(Suite.class)
@SuiteClasses({
    testMyService.class,
    testMyBackend.class,
    ...
})

public class AllTests {}

Теперь вы можете запустить это несколькими способами:

  1. щелкните правой кнопкой мыши и запустите в Eclipse как тест Junit
  2. создать работающее Java-приложение; Основной класс = 'org.junit.runner.JUnitCore' и аргументы = 'my.package.tests.AllTests'
  3. запустить из командной строки:

    $ java -cp build/classes/:/usr/share/java/junit4.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore my.package.tests.AllTests

Добавил бы еще больше голосов за CMDLine :)
Gruber

9

Я думаю, что TestSuite потерял популярность. Возможно, это был стиль до 4.x, но, насколько мне известно, он не сейчас.

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


11
Я могу ошибаться, но я думаю, что TestSuite по-прежнему хорош, когда нам нужно указать порядок тестов, особенно в автоматических интеграционных тестах, где тестирование небольших сценариев должно предшествовать более сложным сценариям.
Берти

@duffymo Я нахожу ваш комментарий интересным, так как до сих пор меня тренировали в соответствии с концепцией до 4.x относительно организации тестовых
наборов

6
Если у вас большее количество тестов, разные функциональные области / модули, различие между «основными» и вспомогательными / более медленными / дорогими неосновными тестами - по любой из этих причин - вы должны структурировать тесты в TestSuite.
Thomas W

1
Вы можете использовать @SuiteClassаннотацию в нескольких классах, и вы можете вкладывать наборы в наборы. Идея их организации в 3.x по-прежнему полностью актуальна (и ее следует использовать). Вы можете структурировать все точно так же, как и раньше; вы просто используете синтаксис аннотации вместо TestSuite.suite(). На самом деле нет никакой пользы от использования TestSuiteаннотации, и вы можете воспользоваться всеми улучшениями JUnit 4, если используете организационно эквивалентную аннотацию.
Thunderforge

3

Вот шаги для создания набора JUnit в eclipse:

  1. В представлении «Package Explorer» перспективы eclipse «Java» выберите свои модульные тесты в их пакете внутри java-проекта eclipse.
  2. Щелкните правой кнопкой мыши любой из выбранных тестов.
  3. Во всплывающем меню выберите New, Other…
  4. Откройте папку «Java», затем откройте папку «JUnit».
  5. Выберите «JUnit Test Suite», а затем нажмите кнопку «Далее».
  6. Выберите кнопку "Готово".
  7. Результат: создан файл пакета AllTests.java с автоматически включенными тестами.
  8. Нажмите кнопку Run в eclipse
  9. Результат: все тесты в комплекте запускаются
  10. Теперь вы можете указать этот файл пакета с помощью ANT, Jenkins или другого инструмента непрерывной интеграции конфигурации сборки.

Информация о версии: это для eclipse Neon и JUnit 4. Вы также можете выбрать JUnit 3 перед тем, как выбрать «Готово» на шаге 6.


Не могли бы вы опубликовать файл build.xml, показывающий, как запустить этот набор тестов из ANT?
LiborStefek

1

В верхней части моей головы создайте TestSuite и вызовите addTests. Если вы хотите, чтобы какой-то источник посмотрел, попробуйте любую библиотеку с открытым исходным кодом, такую ​​как hibernate или что-то из apache, и загляните в тестовый каталог источника для набора тестов ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.