В настоящее время я пытаюсь создать частичный макет репозитория, но у меня возникают проблемы, когда я пытаюсь аннотировать репозиторий 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 над членом класса неправильным способом использования шпионских бинов?