在进行 mockMvc 测试时使用 Mockito 注册春豆



这是我的想法,我尝试用MockMvc测试我的Restful控制器

mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
mockMvc.perform(post(...).param(..))
       .andExpect(...);

我调用的 API 会触发 rabbitmq 消息。但我不想在测试中测试 Amqp。相反,我创建了一个这样的模拟生产者:

@Mock
private AmqpProducer producer

我想将此生产者注入到 spring 上下文中,以便我可以捕获方法调用producer.sendMessage并测试消息。

要在 Spring Boot 上下文中模拟 Bean,您不能直接使用 @Mock
它将为AmqpProducer创建一个模拟,但不会为您的容器创建一个模拟。
使用Spring,经典的方法是使用提供模拟的特定上下文配置类或文件(@ContextConfiguration(...)(来注释测试类。
使用Spring Boot,它更简单:用@WebMvcTest注释你的类而你用@MockBean模拟的田地就足以模拟容器中的豆子(弹簧指南(。

请注意,具有注释值中指定的指定控制器类的@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);
    }
}

相关内容

  • 没有找到相关文章

最新更新