Mockito @SpyBean конфликт аннотаций с SpringRunner - PullRequest
0 голосов
/ 05 июня 2018

В настоящее время я пытаюсь создать частичный макет репозитория, но у меня возникают проблемы, когда я пытаюсь аннотировать репозиторий JDBC с помощью SpyBean.

@RunsWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = ServiceApplication.class)
@ActiveProfiles("unit-test")
public abstract class TestBase {

    @SpyBean
    protected JdbcRepository jdbcRepository;

    @Before
    public void baseSetUp() throws Exception {
        MockitoAnnotations.initMocks(this);

        this.testContextManager = new TestContextManager(getClass());
        this.testContextManager.prepareTestInstance(this);

        this.classLoader = getClass().getClassLoader();
        ...
    }

Когда я запускаю приложение, я получаюследующее сообщение:

org.springframework.beans.factory.BeanCreationException: невозможно вставить поле: protected com.sample.app.JdbcRepository не может иметь существующее значение

Однако я нашелНесколько способов избежать ошибки:

  • Когда "@RunsWith (SpringRunner.class)" удален, тесты, кажется, работают нормально.Тем не менее, большая часть документации, которую я прочитал, указывает на то, что это необходимо
  • Добавлен «@SpyBean (JdbcRepository.class)», и автоматическое подключение jdbcRepository также, похоже, работает.Возможно, это проблема контекста, когда он пытается создать экземпляр JdbcRepository несколько раз?

Короче говоря, я не уверен, почему мой тест вызывает исключение BeanCreationException.Не является ли аннотация @SpyBean над членом класса неправильным способом использования шпионских бинов?

...