Я пытаюсь написать конкретный JUnit Runner, и я не нашел хороших учебников/примеров в Интернете.
Требования следующие:
@BeforeClass
который необходимо запустить, если тест запускается самостоятельно@BeforeClass
должен запускаться только один раз.@Before
и @After
.При этом я рассмотрел различные варианты.
Я начал с создания Test Suites
который будет представлять мои тестовые категории, используя предоставленный junit Suite Runner. (@RunWith(Suite.class)
). Вам необходимо вручную предоставить Tests
в пакете, используя @SuiteClasses()
который раздражает.
Итак, я посмотрел на ClasspathSuite
Runner, который позволяет помещать все классы из класса в каждый набор и фильтровать их после @Category
Он также предоставляет аннотацию @BeforeSuite
которая запускается один раз при запуске пакета.
=> Все почти идеально.
@BeforeClass
из этого тестаTest Suite
запускается, правильные Tests
запускаются (благодаря @Category
), то @BeforeSuite
вызывается только один раз, но @BeforeClass
каждого теста также называется, где он не должен.=> Все это заставило меня задуматься о внедрении моего собственного Бегуна. Я попробовал расширить ClasspathSuite Runner, но он не предназначен для этого. Я попытался расширить ассортимент Suite Runner, но мне это не удалось.
Не могли бы вы помочь мне понять, как реализовать эти требования в JUnit Runner?
Как насчет этого, не написав бегуна? Вместо этого напишите метод @BeforeClass
котором используется одиночный список, который записывает каждый метод перед категорией, который был запущен в текущем тестовом прогоне, и знает, как запускать все методы перед категорией (каждый, вероятно, в своем классе). Метод @BeforeClass
определяет свой класс @Category
, проверяет список и
@Category
категории предшествующей категории уже запущен или@Category
метод @Category
был запущен.Лучше не требовать настраиваемого бегуна, потому что он будет работать в средах, которые предоставляют свои собственные бегуны, такие как IDE и серверы непрерывной интеграции.
ClasspathSuite
иSuite
? Кроме того, неorg.junit.experimental.categories.Categories
делать то, что вы хотите?