当前位置: 代码迷 >> 综合 >> springboot整合 Junit 单元测试 和 swagger
  详细解决方案

springboot整合 Junit 单元测试 和 swagger

热度:8   发布时间:2023-12-12 20:06:38.0

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

三、几种测试对比:

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