概述
对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,这样会导致测试无法进行,为了可以对Controller进行测试,可以通过引入MockMVC进行解决。
简介
MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
运行配置
用到的注解
1. RunWith(SpringJUnit4ClassRunner.class)
: 表示使用Spring Test组件进行单元测试;
2. @WebAppConfiguration
: 使用这个Annotate会在跑单元测试的时候真实的启一个web服务,然后开始调用Controller的Rest API,待单元测试跑完之后再将web服务停掉;
3. @ContextConfiguration(locations{"classpath:/config/applicationContext.xml"}):
指定Bean的配置文件信息,可以有多种方式,这个例子使用的是文件路径形式,如果有多个配置文件,可以将括号中的信息配置为一个字符串数组来表示;
基本框架
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/config/applicationContext.xml","classpath:/config/spring-mvc.xml"}) //指定Bean的配置文件信息
@WebAppConfiguration
public class MocPostTest {
protected MockMvc mockMvc;
@Autowired
protected WebApplicationContext wac;
@Before() //这个方法在每个方法执行之前都会执行一遍
public void setup()
{
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); //初始化MockMvc对象
}
@Test
public void getAllCategoryTest() throws Exception
{
}
}
测试接口的代码写在getAllCategoryTest
方法中
public void getAllCategoryTest() throws Exception
{
String responseString = mockMvc.perform
(
MockMvcRequestBuilders.post("http://127.0.0.1:8888/login") //请求的url,请求的方法是post
//get("/user/showUser2") //请求的url,请求的方法是get
.contentType(MediaType.APPLICATION_FORM_URLENCODED)//发送数据的格式
.param("username","hyh") //添加参数(可以添加多个)
.param("password","123") //添加参数(可以添加多个)
)