Чтобы высмеивать бин в контексте Spring Boot, вы не можете использовать напрямую @Mock
.
Это создаст макет для AmqpProducer
, но не тот, который используется вашим контейнером.
В Spring классический способ сделать это - аннотировать ваш тестовый класс конкретным классом конфигурации контекста или файлом (@ContextConfiguration(...)
), который предоставляет макет.
С Spring Boot это проще: аннотировать класс с помощью @WebMvcTest
и ваше поле для насмешки с @MockBean
достаточно для насмешки боба в контейнере ( Spring guide ).
Обратите внимание, что @WebMvcTest
с указанным классом контроллера, указанным в значении аннотации, будет создавать экземпляр указанного контроллера, а также всех его объявленных прямых зависимостей. Таким образом, вы должны высмеивать их всех, а не только ту, которая вас интересует в вашем модульном тесте.
Так должно выглядеть:
@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
public class WebMockTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private AmqpProducer producer;
@Test
public void foo() throws Exception {
this.mockMvc.perform(...);
verify(producer).sendMessage(expected);
}
}