У меня есть тест JUnit 4, упрощающий код до необходимого минимума, он выглядит так:
Вот SpringJunitConfig.class:
@Configuration
@ComponentScan
public class SpringJUnitConfig {
}
и сам тест:
@RunWith(JUnitParamsRunner.class)
@ContextConfiguration(classes = SpringJUnitConfig.class)
public class ProcessDefinitionDbUnitTest
@Autowired
private SomeRepository someRepository;
private static List<Long> idList = new ArrayList<>();
@Before
public void before() {
someRepository.findAll().stream().forEach(item-> idList.add(item.getId()));
}
public static Object[] getItemIds() {
Object[] list = new Object[idList.size()];
for (int i = 0; i < idList.size(); i++) {
list[i] = idList.get(i);
}
return list;
}
@Test
@Parameters(method = "getItemIds")
public void testProcessInsOrder(Long itemId) {
// the method below is not important to my question
testSomething(otherRepository.findOne(itemId), ItemDefinition::getItemType);
}
Моя проблема в том, что метод getItemIds()
выполняется до метода before()
, поэтому все тесты, помеченные @Parameters(method = "getItemIds")
, пропускаются.
Я не могу переместить repository.findAll()
к методу getItemIds()
, потому что он должен быть c.
Та же ситуация с аннотацией @BeforeClass
, метод инициализации также должен быть c, поэтому я не могу использовать репозиторий в его теле eiter.
Есть ли способ инициализировать данные перед запуском метода getItemIds()
сбора данных? Или есть другой способ сделать это, предполагая, что я не могу использовать JUnit 5?