Mockito:@Mock对象何时初始化以及它调用的构造函数

Li-*_* Yu 2 java junit unit-testing jmockit mockito

我想弄清楚mockito是如何工作的,以便进行调试.我想知道带有@Mock注释的对象,什么时候初始化?喜欢,在@Before之前或@Before之后?

如果有几个不同的构造函数,mockito如何确定要调用哪些构造函数?

如果我使用jmockit @Mocked,那么上面的问题是否有任何不同的答案?

谢谢!

Jef*_*ica 5

使用Mockito创建的模拟对象不会调用任何构造函数或静态初始化程序.(这是通过实现Objenesis在旧版本中的Mockito和ByteBuddy在新版本中).因此,所有的字段是未初始化的,且无副作用发生的构造在所有包括你可能会看到抛出的异常.

相比之下,间谍对象确实有他们的构造函数.如果你没有初始化字段,Mockito将默认调用无参数构造函数(公共或私有),并且可以在初始化程序内调用所选的构造函数.

@Mock注释初始化的顺序取决于您用来初始化模拟的技术:

  • AFAICT,MockitoRule是一个MethodRule,而不是TestRule,因此它不能在RuleChain中使用. (2认同)