Mockito+Junit5
单元测试包含的基本的东西包括:测试的环境准备,就是 mock 出来的对象,规定对象要发生的行为,最重要的是要进行断言,看这个行为返回的结果是否符合预期。
在要编写测试类的类中右键选择
基础知识
Mockito
一、为什么需要 mock ?
Mock 可以理解为一个虚假的对象,模拟出一个对象,在测试环境中用来替换掉真实的对象,以达到我们可以:
1、验证该对象某些方法的调用情况,调用了多少次,参数是什么。
2、给这个对象的行为做一个定义,来指定返回结果或者是指定特定的动作。
二、Mock方法
Mockito.mock(类):Mock 方法模拟出一个对象或者接口
三、验证和断言
Mockito.verify()方法:校验待验证的的对象是否发生过某些行为。verify 配合 time() 方法可以校验某些操作发生的次数:Mockito.verify(对象, Mockito.times(1)).nextInt()
四、给 Mock 对象打桩
意思就是给 mock 对象的行为做定义,让 mock 对象执行操作后返回提前规定好的值。Mockito.when(对象. 方法). 要求的相应。
五、@Mock 注解
可以理解为快速创建 mock 对象的一种方法,之前是用 Mockito.mock(对象)方法,现在定义一个类直接在类上添加 @Mock 注解来代替。
要注意的是 mock 注解要配合 MockitoAnnototions.openMocks(类) 方法一起使用,来使 mock 注解生效。
六、@BeforeEach 和 @AfterEach 注解
beforeEach 注解的方法是执行测试前的准备。
beforeAfter 注解的方法是执行测试后执行的。
七、Spy 方法和 @Spy 注解
Spy 方法和 mock 方法不同的是 spy 的对象会走真实的方法,而 mock 的对象不会;
Spy 方法的参数是对象实例,mock 方法的参数是类。
简单使用:
打桩
模拟静态方法
单元测试提高代码覆盖率
@InjectMocks 的作用是把其他 Mock 的对象注入到 当前 InjectMocks 作用的对象中。
行覆盖率。看是否测试到方法中的某些行。
总结:
第一是看要测的类是什么。
用 Spy 引入,因为要走真实的方法。然后看类中是否有其他对象的注入。
然后开启 Mock 方法和 Spy 方法
然后就是主题测试类,对不同的情况来写。
静态方法,要先把静态方法所属的类 Mock 出来
对具体的静态方法进行打桩,然后按照打桩的方法继续执行。
对于 try-catch 要考虑两种情况,一是会触发 catch ,一种是不会触发 catch 。
让测试类会完整的覆盖掉代码的方方面面。