Как смоделировать один компонент в SpringBootTest? - PullRequest
0 голосов
/ 25 марта 2020

Попробуйте 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.

...