Как создать одни тестовые пружинные бобы раньше других

0
задан piotrek 5 March 2019 в 16:34
поделиться

3 ответа

Вы можете создать TestApplication (в src/test/java), который тривиально расширяет ваш фактический класс приложения Spring Boot и зависит от вашего тестового компонента. Затем попросите SpringBootTest загрузить ваше TestApplication вместо производственного приложения.

Пример TestApplication:

@DependsOn("beanB")
@Configuration
@Import(YourApplication.class)
public class TestApplication {}

Пример класса тестирования:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class YourApplicationTests {
...
0
ответ дан neildo 5 March 2019 в 16:34
поделиться

Но в тестах я хочу, чтобы бин B создавался перед бином A

...

и я не хочу связывать производственный код с тестами.

Что-то вроде этого?

@Profile("test")
@Bean
public BeanB beanB() {
    return new BeanB();
}

@Profile("test")
@Bean
public BeanA beanA(BeanB beanB) {
    return new BeanA();
}

@Profile("!test")
@Bean
public BeanA beanA() {
    return new BeanA();
}
0
ответ дан Mikhail Kholodkov 5 March 2019 в 16:34
поделиться

Нет простого способа сделать то, что ты просишь. Лучше всего иметь необязательную зависимость в A. В производственной среде зависимость будет отсутствовать и будет игнорироваться. В тестах вы предоставите компонент, содержащий вашу реализацию подготовки к тесту.

Да, вы добавляете немного дополнительной сложности ради тестов, которые не идеальны, но очень ограничены.

Прости страшные имена:

interface APreparer {
    void prepareA();
}

@Component
public class A {
     public A(final Optional<APreparer> preparer) {
          preparer.ifPresent(APreparer::prepareA);
     }
}
0
ответ дан Michael 5 March 2019 в 16:34
поделиться
Другие вопросы по тегам:

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