springboot整合 Junit 单元测试 和 swagger

一、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注解中,指定一个请求参数的各个方面

三、几种测试对比:

  1. 浏览器测试;当我们开发好一个接口,如:/user/1,那我们就可以在浏览器中输入:http://127.0.0.1/order/1 看是否能得到我们期望的结果;这种方式的特点就是简单,缺点是只能测试GET接口;
  2. PostMan;市面上很多类似的工具,功能强大,简单好用;缺点是可配置性较弱;
  3. MockMvc测试工具,功能强大,灵活性更强,可配置性更强,更有利于调整或成功之后的功能确认;缺点是需要在开发的过程中多花一点点时间去写测试用例(个人觉得这个时间消耗是会在后续的便捷操作中还给你的)。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值