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

标签 java unit-testing junit mockito jmockit

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

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

如果我改用 jmockit @Mocked,上述问题是否有不同的答案?

谢谢!

最佳答案

Mock 使用 Mockito 创建的对象不调用任何构造函数或静态初始化程序。 (这是通过旧版本的 Mockito 中的 Objenesis 和新版本中的 ByteBuddy 实现的。)因此,所有字段都未初始化,并且构造函数中根本没有副作用,包括您可能看到的任何异常抛出。

相比之下, spy 对象 do have their constructors called .如果您不初始化该字段,Mockito 将默认调用无参数构造函数(公共(public)或私有(private)),您可以在初始化器中调用您选择的构造函数。

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

关于java - Mockito:@Mock 对象何时初始化以及它调用哪个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39376471/

相关文章:

java - 忽略查询中的区分大小写和空格

javascript - 如何使用 Ember.js 编写单元测试套件?

java - MySQL 连接不适用于 HikariCP

java - 如何向java进程提供密码

ruby - 在 Ruby 的 Test::Unit::TestCase 中,如何覆盖初始化方法?

java - 如何在 junit 测试中停止 cassandra 嵌入式服务器

java - 使用 Mockito 进行模拟

java - java.lang.NoClassDefFoundError : Could not initialize class java test step definition class

java - 在java中操作文本文件

java - 如何正确使用模拟