Метод предоставления данных junitparams запускается до подготовки данных аннотированного метода JUnits @Before - PullRequest
0 голосов
/ 05 мая 2020

У меня есть тест 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?

...