一、Junit
1、JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量。
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
注解解析:
@SpringBootTest:获取启动类,加载配置,确定装载 Spring 程序的装载方法,它回去寻找 主配置启动类(被 @SpringBootApplication 注解的)
@RunWith(SpringRunner.class):让 JUnit 运行 Spring 的测试环境, 获得 Spring 环境的上下文的支持
- @Before:初始化方法,执行当前测试类的每个测试方法前执行。
- @After:释放资源,执行当前测试类的每个测试方法后执行
- @Test(timeout = 1000) 超时测试
- @Test(expected = NullPointerException.class) 异常测试
测试service、Dao层、工具类:
测试Controller就要使用MockMvc:
注:MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。同时提供了一套验证的工具,结果的验证十分方便。
- 使用@WebMvcTest注解时,只有一部分的 Bean 能够被扫描得到
- 接口MockMvcBuilder,提供一个唯一的build方法,用来构造MockMvc。
@RunWith(SpringRunner.class)
@SpringBootTest
public class NyncTotalControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
//Spring 上下文的环境到 MockMvc 中
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
- mockMvc.perform执行一个请求
- MockMvcRequestBuilders.get(“XXX”)构造一个请求
- ResultActions.param添加请求传值
- ResultActions.accept(MediaType.TEXT_HTML_VALUE))设置返回类型
- ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
- ResultActions.andReturn表示执行完成后返回相应的结果
get方法测试:
@Test
public void mockTestC() throws Exception {
mockMvc.perform(get("/queryUserByTel")
.param("usertel","18979173291")
.accept(MediaType.APPLICATION_JSON_UTF8))
.andDo(print());
}
post测试:
@Test
public void queryGridFFMenu() throws Exception {
mockMvc.perform(post("/nync/queryGridFFMenu")
.param("gridCode","36")
.accept(MediaType.APPLICATION_JSON_UTF8))
.andDo(print());
}
二、Swagger
1、导包
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
2、添加配置类
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.jxtele.nync.controller"))
.paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("Springboot-api文档")
.description("").termsOfServiceUrl("")
.version("1.0").build();
}
}
3、测试Controller
因为系统都是没登陆状态下任何界面都是会直接跳转到login页面,所以我们都要先进行登录,在直接打开页面:
http://localhost:端口号/swagger-ui.html#
如图:
如果在代码中接受参数是String类型或者实体类的类型,那么直接编辑就可以。如果是map类型,则需要先创建一个注解,代码如下:
@Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiJsonObject {
ApiJsonProperty[] value(); //对象属性值
String name(); //对象名称
}
@Target(ElementType.ANNOTATION_TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiJsonProperty {
String key(); //key
String example() default "";
String type() default "string"; //支持string 和 int
String description() default "";
}
就可以实现接口的验证。
4、几个重要的注解讲解
- @Api:用在类上,说明该类的作用
- @ApiOperation:用在方法上,说明方法的作用
- @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
三、几种测试对比:
- 浏览器测试;当我们开发好一个接口,如:/user/1,那我们就可以在浏览器中输入:http://127.0.0.1/order/1 看是否能得到我们期望的结果;这种方式的特点就是简单,缺点是只能测试GET接口;
- PostMan;市面上很多类似的工具,功能强大,简单好用;缺点是可配置性较弱;
- MockMvc测试工具,功能强大,灵活性更强,可配置性更强,更有利于调整或成功之后的功能确认;缺点是需要在开发的过程中多花一点点时间去写测试用例(个人觉得这个时间消耗是会在后续的便捷操作中还给你的)。