首先要导包:
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
其他的包不一一列举了
- 声明测试类引擎@RunWith
- 指定Spring和SpringMVC配置文件的位置@ContextConfiguration
- 获取WebApplicationContext对象context需要两个步骤
(1) @Autowired //只能自动装配ioc容器里面的
WebApplicationContext context;
(2)@WebAppConfiguration //把WebIOC容器也拿过来 - 构造虚拟mvc请求MockMvc (带有@Before(Junit标签)这个标签的方法为每次运行测试方法前执行此方法。)
- 通过虚拟mvc请求进行获取请求数据
MvcResult result =mockMvc.perform
(MockMvcRequestBuilders.get("/emps").param(“pn”, “1”))
这里模拟的是get请求,还可以模拟post等其他类型请求 - 拿到的request就可拿到Controller类中方法请求的各类数据了。
/**
* 使用Spring测试模块提供的测试请求功能,测试crud请求的正确性
* @author Bing
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration //把WebIOC容器也拿过来
@ContextConfiguration(locations = {"classpath:applicationContext.xml","file:src/main/webapp/WEB-INF/dispatcherServlet.xml"})
public class MvcTest {
//传入SpringMvc的ioc
@Autowired //只能自动装配ioc容器里面的
WebApplicationContext context;
//虚拟mvc请求,获取到处理结果
MockMvc mockMvc;
@Before //在每个测试方法执行前运行以下方法
public void initMokcMvc() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void testPage() throws Exception {
//模拟请求拿到返回值
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emps").param("pn", "1"))
.andReturn();
//请求成功以后,请求域中会有pageInfo;我们可以取出pageInfo进行验证
MockHttpServletRequest request = result.getRequest();
PageInfo pageInfo = (PageInfo)request.getAttribute("pageInfo");
System.out.println("当前页码:"+pageInfo.getPages());
System.out.println("总记录数:"+pageInfo.getTotal());
int[] navigatepageNums = pageInfo.getNavigatepageNums();
System.out.print("在页面需要连续显示的页码:");
for (int i : navigatepageNums) {
System.out.print(" "+i);
}
System.out.println();
//获取员工数据
List<Employee> list =pageInfo.getList();
for (Employee employee : list) {
System.out.println("请求结果:"+employee);
}
}
}
测试类结果: