利用springmvc整合的Junit对controller进行单体测试

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的配置文件

使用Junitcontroller层进行测试:

方法一(直接注入bean,调用方法):只测试了方法,不建议用

   1).在要测试的方法上加注解: @RunWith@ContextConfiguration

 

   2).模拟requestresponse(一般在@Before中完成)

 

request = new MockHttpServletRequest();

response = new MockHttpServletResponse();

 

 3).初始化resquestresponse

 

      (向requestresponse中设置数据)

request.setContentType(“application/octet-stream”);设置请求类型

request.setParameter("userName", "admin");设置请求参数

request.setContent(“aa”.getBytes());将请求的内容设置为字节数组(有向body设置内容的作用)

 

   4).调用业务逻辑,此时通过request取得的值就是设置的值

 

Request.getContentType()//application/octet-stream

 

方法二:使用MockMVC模拟通过URL的接口调用,MOCKMVCspringmvc提供的controller层的测试类

 

   1).类上加注解:

   @RunWith(SpringJUnit4ClassRunner.class)

   @ContextConfiguration

@WebAppConfiguration测试环境使用的ApplicationContext将是WebApplicationContext类型的(在集成web环境测试中使用)

2).声明MockMVC或者ControllerWebApplicationContext

 

3).setUp中构造MockMVC(两种方式:StandaloneMockMvcBuilderDefaultMockMvcBuilder):必须在测试方法前执行,否则报错

 

集成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,它有三个功能:

 

  1. ResultActions andExpect(ResultMatcher matcher) :添加验证断言来判断执行请求后的结果是否是预期的

andExpect(status().is(400)):response中的status是否是400

 

  1. ResultActions andDo(ResultHandler handler) :添加结果处理器,用于对验证成功后执行的动作,如输出请求/结果信息用于调试

andDo(print():打印

手动导包:

Import static

org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;

 

cMvcResult andReturn() :返回验证成功后的MvcResult;用于自定义验证/下一步的异步处理

猜你喜欢

转载自blog.csdn.net/cat18292575042/article/details/88396422