Стабилизация MockBean неэффективна - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть класс конфигурации с несколькими MockBeans, заменяющими фактические bean-компоненты в контексте для тестов.

@Configuration
public class MyTestConfig {
    @MockBean
    private MyService myService;
}

Я использую эти макеты в своих тестах:

@Import({ MyTestConfig .class })
public class MyTest {
    @Autowired
    private MyService myService;

    @Test
    public void aTest() {
        ...
    }
}

Сначала идея быладобавить заглушку в этот класс конфигурации MyTestConfig, чтобы макет был предварительно подготовлен для всех тестов, поэтому я сделал это в методе @PostConstruct, и он работал просто отлично - макет в тесте вернул ожидаемое значение:

@PostConstruct
public void init() {
    when(myService.foo("say hello")).thenReturn("Hello world");
}

Однако оказалось, что создание готового макета, подходящего для всех испытаний, может быть сложным, поэтому мы решили перенести заглушку на испытания.

@Test
public void aTest() {
    when(myService.foo("say hello")).thenReturn("Hello world");
}

Иэто не работает - метод с заглушкой возвращает null.Мы хотим оставить MockBeans в классе конфигурации, но заглушить их в тестах, поэтому любой совет, почему заглушка неэффективна?

Spring Boot 2.0.5, Mockito 2.22.0

1 Ответ

0 голосов
/ 23 ноября 2018

Да, создание заглушки должно выполняться в соответствующих тестовых случаях (если у вас нет класса тестирования, который разделяет сценарии создания заглушек, но все сводится к предпочтениям).

Однако для создания @MockBeans вамнужно будет использовать @SpringBootTest для того, чтобы заменить фактические бины на макеты.Это можно сделать так же просто, как в этом примере:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {

    @Autowired
    private MyTestClass testClass;
    @MockBean
    private MyService service;

    @Test
    public void myTest() {
      // testing....
  }

}
...