勿谓今日不学而有来日,勿谓今年不学而有来年。
日月逝矣,岁不我延。

使用JUnit4进行SSM单元测试 MockMvc测试Controller

Junit进行普通的Java测试还是很简单的,但是要进行j2ee测试就涉及到Http请求,还好只要知道如何创建虚拟的Http请求测试就会变得跟java测试一样了。

MockMVC

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

测试注解

@RunWith(SpringJUnit4ClassRunner.class)

@WebAppConfiguration

  • 使用这个Annotate进行单元测试时Spring会真实的启一个web服务,然后开始调用Controller的Rest API,待单元测试结束之后再将web服务停掉.

@ContextConfiguration(locations = {“classpath*:applicationContext.xml”, “classpath*:dispatcherServlet-servlet.xml”})

  • 注意配置文件还要加载SpringMVC配置文件dispatcherServlet-servlet.xml

方法调用

  1. MockMvcRequestBuilders类会构造需要的http请求也可以调用param来构造URL传参 如:MockMvcRequestBuilders.get(“/emps”).param(“pn”, “1”)
  2. MockMvc的对象去调用perform来发送上面的请求并调用andReturn()来获取返回结果(MvcResult)
  3. MvcResult中包含获取到的各种http响应请求,可以调用get…来获取(MockHttpServlet…). 如:getRequest()会返回MockHttpServletRequest
  4. MockHttpServlet…可以当作常规的http请求来获取域中的属性属性值。如:PageInfo pi= (PageInfo) result.getRequest().getAttribute(“pageInfo”);

测试示例

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath*:applicationContext.xml", "classpath*:dispatcherServlet-servlet.xml"})
public class EmployeeControllerTest {
    //传入SpringMvc的IOC
    @Autowired
    WebApplicationContext context;

    MockMvc mockMvc;
    /**
     * 初始化MockMvc
     */
    @Before
    public void initMockMvc(){
        mockMvc= MockMvcBuilders.webAppContextSetup(context).build();
    }

    @Test
    public void getEmps() throws Exception {
       // 模拟请求获取返回值
       MvcResult result= mockMvc.perform(MockMvcRequestBuilders.get("/emps")
               .param("pn", "1")).andReturn();
       // 从请求域中取值
        PageInfo pi= (PageInfo) result.getRequest().getAttribute("pageInfo");

        System.out.println(pi.getPageNum()+"当前页码");
        System.out.println(pi.getPages()+"总页数");
         System.out.println(pi.getTotal()+"总记录数");
        System.out.println("在页面下需要连续显示的页码");
        int[] nums = pi.getNavigatepageNums();
        for (int num : nums) {
            System.out.print(" "+num);
        }
        System.out.println("\n");
        List<Employee> lits = pi.getList();
        for (Employee lit : lits) {
            System.out.println("ID:"+lit.getEmpId()+"\tDID"+lit.getdId());
        }
    }
赞(1)
未经允许不得转载:喋喋不休 » 使用JUnit4进行SSM单元测试

评论 抢沙发

评论前必须登录!

 

精品网站

有券无忧电脑壁纸精选