一、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 {
@Autowiredprivate WebApplicationContext wac;private MockMvc mockMvc;//Spring 上下文的环境到 MockMvc 中@Beforepublic 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方法测试:
@Testpublic void mockTestC() throws Exception {
mockMvc.perform(get("/queryUserByTel").param("usertel","18979173291").accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print());}
post测试:
@Testpublic 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 {
@Beanpublic 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(); //keyString example() default "";String type() default "string"; //支持string 和 intString description() default "";}
就可以实现接口的验证。
4、几个重要的注解讲解
- @Api:用在类上,说明该类的作用
- @ApiOperation:用在方法上,说明方法的作用
- @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
三、几种测试对比:
- 浏览器测试;当我们开发好一个接口,如:/user/1,那我们就可以在浏览器中输入:http://127.0.0.1/order/1 看是否能得到我们期望的结果;这种方式的特点就是简单,缺点是只能测试GET接口;
- PostMan;市面上很多类似的工具,功能强大,简单好用;缺点是可配置性较弱;
- MockMvc测试工具,功能强大,灵活性更强,可配置性更强,更有利于调整或成功之后的功能确认;缺点是需要在开发的过程中多花一点点时间去写测试用例(个人觉得这个时间消耗是会在后续的便捷操作中还给你的)。