文章目录
@RunWith(MockitoJUnitRunner.class) vs MockitoAnnotations.initMocks(this)
1. MockitoJUnitRunner 和 initMocks(this) 都可以为UT提供框架使用的自动验证
若写UT时,若在mock数据有语法或者书写错误,框架使用的自动验证会在单元测试运行的时候报告出来。
-
你使用Mockito.when静态方法时,但后面没有跟 thenReturn、thenThrow或then,在运行时会检测出来,如:
when(myMock.method1()); // 错误写法 when(myMock.method1()).thenReturn(1); // 正确写法,当myMock类调用method1时返回1
-
当你对结果进行验证使用 verify 时,但忘记提供您要验证的方法调用
verify(myMock); // 错误写法 verify(myMock).method2(); // 正确写法,验证myMock是否调用了method2方法
-
当你在doReturn后使用when时,忘记了方法的调用等
doReturn("World").when(myMock); // 错误写法 doReturn("World").when(myMock).method2(); // 正确写法,当myMock类调用method2时返回"World"
如果您没有在框架中使用验证,则在真正调用方法之前不会报告这些错误,简而言之,MockitoJUnitRunner为您提供框架使用的自动验证。
2. MockitoJUnitRunner 和 initMocks(this) 对UT提供mock初始化工作
- 在单元测试中使用@Mock, @Spy, @InjectMocks等注解时,需要进行初始化后才能使用
- 若在单元测试类中使用了@RunWith(SpringJUnit4ClassRunner.class) 就不能再使用@RunWith(SpringJUnit4ClassRunner.class),可以使用 MockitoAnnotations.initMocks(this) 来代替
- MockitoAnnotations.initMocks(this),其中this就是单元测试所在的类,在initMocks函数中Mockito会根据类中不同的注解(如@Mock, @Spy等)创建不同的mock对象,即初始化工作