前言

在springboot中测试接口,我们可以采用postman进行测试,但还有其他方式,比如junit测试,在test包中测试接口

本章分为三节,分别讲在test包下的三种接口测试方式

  1. Service测试
  2. Controller测试
  3. TestRestTemplate测试

Service测试

service类中的方法
我建了一个service,里面有两个方法

  • 分别是获取姓名(getName),姓名作为请求参数,然后字符串拼接姓名返回出去
  • 另一个是获取一个对象,对象作为请求参数传入并返回

book对象
然后在测试包下面建立一个测试类,并在类上面加上两个类注解:@SpringBootTest,@RunWith(SpringRunner.class)

service测试接口
首先注入service,然后注入的对象就可以调用方法了

写一个测试方法,测试方法上加:@Test 注解,然后点击方法前面的绿色标记就可以启动方法进行结果测试,我这里用了断言来测试响应结果验证,验证结果是否等于我预期的值

Assert.assertThat(name, Matchers.is(“姓名:三国演义”));
第一个参数:name是响应结果,第二个参数:Matchers.is(“姓名:三国演义”))是预期结果值

测试结果
绿色代表接口测试正确,响应结果和预期结果一致

Controller测试

controller测试有点复杂,不像service直接注入对象就行了。这里我用mockMvc来测试controler接口,建一个 HelloController 类
controler类
类中有两个方法,一个get方法,一个post方法。

然后写测试类型,controller测试类和service测试类一样,加两个类注解,然后写一个类启动之前的方法,生成 MockMvc 的实例,方法上一定要加 :@Before 注解,不然测试接口会报错
在这里插入图片描述
然后我们来测试get方法
在这里插入图片描述
用mockMvc发起请求get请求
方法解析:

  • perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;

  • get:声明发送一个get请求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object… urlVariables):根据uri模板和uri变量值得到一个GET请求方式的。另外提供了其他的请求的方法,如:post、put、delete等。

  • param:添加request的参数,如上面发送请求的时候带上了了pcode = root的参数。假如使用需要发送json数据格式的时将不能使用这种方式,可见后面被@ResponseBody注解参数的解决方法

  • andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确(对返回的数据进行的判断);

  • andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台(对返回的数据进行的判-断);

  • andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断);

然后控制台打印结果值
System.out.println(mvcResult.getResponse().getStatus() + " -- "+mvcResult.getResponse().getContentAsString());

status是响应code码,200代表成功,其他表示失败,根据编码查看失败原因
contentAsString是把响应body转成string格式
测试结果
红色的值,是控制台打印出的值。蓝色部分是andDo(MockMvcResultHandlers.print())打印的报文,包含请求url,类型,参数,请求头,响应状态码,响应头,响应body等信息

然后我们看post请求,发送json参数
在这里插入图片描述
在这里插入图片描述
唯一变化的地方就是,请求类型变为post,请求参数设置是content方法

TestRestTemplate测试

相信看完mock方式测试之后,觉得有点复杂。这里有一个简单的方式,那就是TestRestTemplate,通过TestRestTemplate来调用接口,使用方式和spring中的RestTemplate一致

通过源码,我们可以看到 TestRestTemplate 底层就是用的 RestTemplate
在这里插入图片描述
在这里插入图片描述

首先建一个test包下建一个测试类
在这里插入图片描述
使用TestRestTemplate进行接口测试,上面的@SpringBootTest注解需要进行更改,更改之后,直接通过@Autowired注入TestRestTemplate

在测试方法中,直接使用TestRestTemplate实例发起请求

getForObject代表发起get请求
第一位参数是url
第二位参数是响应数据的类型
第三位参数是请求参数的值

postForObjesc代表发起post请求
第一位参数是url
第二位参数是请求参数
第三位参数是响应类型

怎么样,是不是比Mock测试简单很多。唯一的难点就是 TestRestTemplate 的使用方法,我推荐你看下「 江南一点雨」的博客

Spring RestTemplate中几种常见的请求方式

「松哥」的博客写的很清晰

END


丶clearwater

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐