Тестирование Spring Boot 1.3 с вложенным бином - PullRequest
1 голос
/ 18 мая 2019

Я пытаюсь написать интеграционный тест, который тестирует класс A с вложенным внедрением зависимостей.Итак, в конечном итоге я хочу внедрить макет класса C.

Мне известна аннотация @MockBean, доступная в Spring Boot 1.4, но мое жесткое требование - Spring Boot 1.3 с Java 7.
Может кто-нибудьпомогите мне, как я могу издеваться над вложенной зависимостью?

public class A {
    @Autowired
    private B b;

    private void run() {
        b.run();
    }
}

public class B {
    @Autowired
    private C c;

    private void run() {
        c.run();
    }
}

public class C {
    private void run() {
        //some action
    }
}

public class Test {
    @Autowired
    private A a;

    @Test
    private void runTest() {
        a.run();
    }
}

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Создайте Mock bean того же типа в контексте теста и пометьте его как Primary.

0 голосов
/ 18 мая 2019

Поскольку версия @MockBean была выпущена начиная с версии Spring 1.4, лучшая альтернатива, которую вы можете использовать, - это библиотека Mockito и ее функции вместо насмешек:

C c = Mockito.mock(C.class);

Предпочитаю инжекцию конструктора вместо метода установки.Вы можете передать этот смоделированный класс через конструктор.


В качестве альтернативы, есть возможность использовать @Profile, чтобы отличить реальный бин от макета.Узнайте больше на Инъекция насмешек Мокито в бобы весны .

...