Junit测试的特点:
1).不用在每个类里写Main方法进行测试;
2).可以得到每个方法执行所消耗的时间
测试准备:
1).Jar包:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version> 3.2.4.RELEASE </version> <scope>provided</scope> </dependency>
|
2).注解:
@RunWith(SpringJUnit4ClassRunner.class) 注解让测试运行于Spring测试环境;
@ContextConfiguration() 加载Spring的配置文件
使用Junit对controller层进行测试:
方法一(直接注入bean,调用方法):只测试了方法,不建议用
1).在要测试的方法上加注解: @RunWith和@ContextConfiguration
2).模拟request和response(一般在@Before中完成)
request = new MockHttpServletRequest(); response = new MockHttpServletResponse(); |
3).初始化resquest和response
(向request和response中设置数据)
request.setContentType(“application/octet-stream”);设置请求类型 request.setParameter("userName", "admin");设置请求参数 request.setContent(“aa”.getBytes());将请求的内容设置为字节数组(有向body设置内容的作用) |
4).调用业务逻辑,此时通过request取得的值就是设置的值
Request.getContentType()//application/octet-stream |
方法二:使用MockMVC模拟通过URL的接口调用,MOCKMVC是springmvc提供的controller层的测试类
1).类上加注解:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration:测试环境使用的ApplicationContext将是WebApplicationContext类型的(在集成web环境测试中使用)
2).声明MockMVC或者Controller和WebApplicationContext
3).在setUp中构造MockMVC(两种方式:StandaloneMockMvcBuilder和DefaultMockMvcBuilder):必须在测试方法前执行,否则报错
集成Web环境测试:MockMvcBuilders.webAppContextSetup(context).build();
独立测试:MockMvcBuilders.standaloneSetup(ConvertController).build();
4).MockMVC
示例: ResultActions resultActions = mockMvc .perform(post("/convert") .contentType(MediaType.APPLICATION_JSON) .content("abc".getBytes())); MvcResult mvcResult = resultActions.andReturn(); int result = mvcResult.getResponse().getStatus(); |
备注:
Perform():执行一个requestbuilder请求,会自动执行Springmvc流程并映射到对应的控制器
ContentType():设置请求方式
Content():设置请求内容
Param(“xx”,”xx”):设置参数
andReturn():返回MVCResult
ResultActions:
调用MockMVC.perform()返回的是resultActions,它有三个功能:
- ResultActions andExpect(ResultMatcher matcher) :添加验证断言来判断执行请求后的结果是否是预期的
andExpect(status().is(400)):response中的status是否是400 |
- ResultActions andDo(ResultHandler handler) :添加结果处理器,用于对验证成功后执行的动作,如输出请求/结果信息用于调试
andDo(print():打印 手动导包: Import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; |
c.MvcResult andReturn() :返回验证成功后的MvcResult;用于自定义验证/下一步的异步处理