@Mock
和@InjectMocks
的区别
Difference Between @Mock
and @InjectMocks
@Mock
创建一个mock,@InjectMocks
创建一个实例并且将注入由@Mock
或者@Spy
注解生成的mock。注意,需要通过
@Runwith(MockitoJUnitRunner.class)
或者@Mockito.initMocks(this)
来初始化这些mocks并注入。
如下所示:
1 | (MockitoJUnitRunner.class) |
一般而言,是将需要测试的类,注解为@InjectMocks
,将其依赖注解为@Mock
MockitoJUnitRunner.class
和SpringJUnit4ClassRunner.class
的区别
[Using MockitoJUnitRunner.class instead of SpringJUnit4ClassRunner.class]
如果只是简单的没有依赖的单元测试,那么没有必要使用
SpringJUnit4ClassRunner
。这个Runner能够生成复杂的Spring Context。你可以在这个Context中定义你自己的Application context configuration。
SpringJUnit4ClassRunner
比较适合集成测试(integration test purposes)。
ArgumentCaptor(参数捕获器)
学习Mocktio - 利用ArgumentCaptor(参数捕获器)捕获方法参数进行验证
利用参数捕获器来捕获传入方法的参数进行验证。
1 |
|
从实践中看,argument.capture()
中捕获的是对象的引用,而不是复制对象,因而参数中如果对同一对象的两次使用,即便两次之中,对象发生了改变,捕获器也不能感知。如下文所示:
capturing previous values to verify mock object
利用ArgumentCaptor
也可以用来断言日志输出,也就是mock一个appender,捕获appender的输入(即,log信息),利用ArgumentCaptor
对日志进行重放,并断言,达到测试的目的。
1 | /** |