Попробуйте 1 . Использование @MockBean
для подключения макета. MyTest.bean2
и Bean1.bean2
оба являются насмешками, но по разным причинам они разные объекты! Следовательно, вызовы не могут быть проверены на нем.
@SpringBootTest
@RunWith(SpringRunner.class)
public class MyTest {
@Autowired
private Bean1 bean1;
@MockBean
private Bean2 bean2; // they differs
public class Bean1 {
@Autowired
private Bean2 bean2; // they differs
}
Попробуйте 2 . Создание экземпляра бина руками. Таким образом, осмеянный bean2
везде одинаков, и, следовательно, его можно проверить. Но bean1
создается руками => он находится вне контекста пружины => что-то вроде @Transactional
терпит неудачу.
@SpringBootTest
@RunWith(SpringRunner.class)
public class MyTest {
private bean1 bean1;
@MockBean
private Bean2 bean2;
@Before
public void setUp() {
bean1 = new Bean1(bean2); // instantiation
}
public class Bean1 {
@Autowired
private Bean2 bean2;
}
Попробуйте 3 . Создание бина через @TestConfiguration
. Ошибка «ожидаемый единственный соответствующий бин, но найденный 2».
@Autowired
private Bean1 bean1;
@TestConfiguration
static class Conf1 {
@Bean
Bean1 bean1() {
return new Bean1(...);
}
}
Spring Boot 1, Java 8. Требуется @SpringBootTest.