SpringMvc in Action——认识Mock

要继续接下来的学习,我们先看看Mock

概述

对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,这样会导致测试无法进行。当然,我们可以不使用MOCK进行测试,但是这种测试仅仅是调用了方法, 无法模拟浏览器环境。为了可以对代码进行测试,可以通过引入MockMVC进行解决。(下面以测试Controller为例子)

运行配置

用到的注解

  • RunWith(SpringJUnit4ClassRunner.class): 表示使用Spring Test组件进行单元测试;
  • WebAppConfiguration: 使用这个Annotate会在跑单元测试的时候真实的启用一个web服务,然后开始调用Controller的Rest API,待单元测试跑完之后再将web服务停掉;
  • ContextConfiguration: 指定Bean的配置文件信息,可以有多种方式,这个例子使用的是文件路径形式,如果有多个配置文件,可以将括号中的信息配置为一个字符串数组来表示;
  • @ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件
    单个文件
    @ContextConfiguration(Locations=”…/applicationContext.xml”)
    @ContextConfiguration(classes = SimpleConfiguration.class)
    多个文件时,可用{}
    @ContextConfiguration(locations = { “classpath*:/spring1.xml”, “classpath*:/spring2.xml” })

基本框架

/**
 * 演示MockMVC使用
 */
@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();
    }
}

测试逻辑
  校验Controller处理之后,请求是否为成功状态,返回的内容是否包含了:"{‘foo’:‘bar’}"字符串。

@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'}"));
    }
}
  1. mockMvc调用perform,调用controller的业务处理逻辑
  2. perform返回ResultActions,返回操作结果,通过ResultActions,提供了统一的验证方式。
  3. 使用StatusResultMatchers对请求结果进行验证
  4. 使用ContentResultMatchers对请求返回的内容进行验证
  • perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
  • andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;
  • andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台;
  • andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值