java 知识点Java 杂谈

Junit测试 - mockMVC

2019-01-17  本文已影响4人  Tim在路上

使用mock工具可以直接模拟http请求,不用直接产生网络的请求环境,简化了测试流程。

MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。

Spring MVC的测试往往看似比较复杂。其实他的不同在于,他需要一个ServletContext来模拟我们的请求和响应。但是Spring也针对Spring MVC 提供了请求和响应的模拟测试接口,以方便我们的单元测试覆盖面不只是service,dao层。

用到的注解

基本框架

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:**web-config.xml")
@WebAppConfiguration
public class MockMvcTest {
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void demo() throws Exception {
        mockMvc.perform(get("/demo/test").accept(MediaType.parseMediaType("application/json;charset=UTF-8")))
               .andExpect(status().isOk())
               .andExpect(content().contentType("application/json;charset=UTF-8"))
               .andExpect(content().json("{'foo':'bar'}"));
    }
}

解释:

校验Controller处理之后,请求是否为成功状态,返回的内容是否包含了例如"{'foo':'bar'}"字符串。

1 mockMvc调用perform,调用controller的业务处理逻辑

2 perform返回ResultActions,返回操作结果,通过ResultActions,提供了统一的验证方式。

3 使用StatusResultMatchers对请求结果进行验证

4 使用ContentResultMatchers对请求返回的内容进行验证

注意:在实际应用中如果应用到了数据库,在测试过程可能对数据库的增删,可能产生脏数据,可以在类上添加事务回滚的注解。
//配置事务的回滚,对数据库的增删改都会回滚,便于测试用例的循环利用
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional

使用“.属性”获取json里面的数据,如我要获取返回数据中的"data.name",可以写成".data.name"

{
    "status":200,
    "data":{"id":"2","name":"测试"}
}
上一篇 下一篇

猜你喜欢

热点阅读