基于SpringBoot Mock单元测试详解
junit中的基本注解:
-
@test
:使用该注解标注的public void方法会表示为一个测试方法; -
@beforeclass
:表示在类中的任意public static void方法执行之前执行; -
@afterclass
:表示在类中的任意public static void方法之后执行; -
@before
:表示在任意使用@test注解标注的public void方法执行之前执行; -
@after
:表示在任意使用@test注解标注的public void方法执行之后执行;
springboot 单元测试详解(mockito、mockbean)
springboot 单元测试(cobertura 生成覆盖率报告)
1.mock的概念:
所谓的mock就是创建一个类的虚假的对象,在测试环境中,用来替换掉真实的对象,以达到两大目的:
验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等等指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作 2. 添加依赖
新建的springboot项目中默认包含了spring-boot-starter-test的依赖,如果没有包含可自行在pom.xml中添加依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency>
进入 spring-boot-starter-test-2.2.2.release.pom 可以看到该依赖中已经有单元测试所需的大部分依赖,如:
junit
mockito
hamcrest
注意包含的junit为junit5 ,在主要还是使用junit4所以在pom.xml中添加依赖
<dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <scope>test</scope> </dependency>
这里如果不添加的话,在使用@runwith注解的时候也会提示你添加,点击add ‘junit4' to classpath也会自动在pom.xml帮你添加
若为非springboot项目,其他 spring 项目,需要自己添加 junit 和 mockito 的依赖。springboot不要添加,添加后test的时候会出错
<dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.mockito/mockito-all --> <dependency> <groupid>org.mockito</groupid> <artifactid>mockito-all</artifactid> <version>1.10.19</version> <scope>test</scope> </dependency>
3. 常用的 mockito 方法
mockito的使用,一般有以下几种组合:
-
do/when
:包括dothrow(…).when(…)/doreturn(…).when(…)/doanswer(…).when(…) -
given/will
:包括given(…).willreturn(…)/given(…).willanswer(…) -
when/then
: 包括when(…).thenreturn(…)/when(…).thenanswer(…)
例如:
given(userrepository.findbyusername(mockito.anystring())).willreturn(user);
given + willreturn
given用于对指定方法进行返回值的定制,它需要与will开头的方法一起使用
通过willreturn可以直接指定打桩的方法的返回值
when(userrepository.findbyusername(mockito.anystring())).thenreturn(user);
when + thenreturn
when的作用与given有点类似,但它一般与then开头的方法一起使用。
thenreturn与willreturn类似,不过它一般与when一起使用。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: 带你粗略了解C++回文链表
推荐阅读
-
SpringBoot单元测试如何使用 mock静态方法
-
详解在SpringBoot中使用MongoDb做单元测试的代码
-
详解基于JWT的springboot权限验证技术实现
-
详解SpringBoot之添加单元测试
-
基于SpringBoot Mock单元测试详解
-
基于Redis结合SpringBoot的秒杀案例详解
-
基于Springboot+Junit+Mockito做单元测试的示例
-
Java学习系列(二十五)基于Junit3.8和Junit4.x的单元测试详解
-
Java学习系列(二十五)基于Junit3.8和Junit4.x的单元测试详解
-
详解在SpringBoot中使用MongoDb做单元测试的代码