mockito应该调用模拟类的默认构造函数吗?

时间:2011-08-24 09:43:49

标签: java junit tdd mocking mockito

我正在尝试创建一个类的Mockito模拟对象,其中包含一些相当繁重的网络和事务行为,我不想在我正在编写的当前单元测试中处理这些行为。但是,在实例化模拟对象时,Mockito似乎会调用实际类的默认构造函数。默认构造函数会执行在此单元测试的上下文中导致问题的各种事情。

Mockito应该调用默认构造函数吗?有没有办法避免这种行为?

以下是我创建模拟对象的方法:

ConcreteClassWithComplexDefaultConstructor mockObject = mock(ConcreteClassWithComplexDefaultConstructor.class);
编辑:所以我弄清楚发生了什么。没有调用具体类的默认构造函数(正如Luciano指出的那样)。但是,调用类的静态构造函数。据我所知,静态的东西和Mockito工作得不是很好,但有没有办法解决这个问题,即以某种方式让它忽略静态构造函数。然而,我没有很大的希望......

2 个答案:

答案 0 :(得分:9)

嗯,事实证明我错了。 Mockito使用CGLib and Objenesis创建对象。如果您按照该链接说明它是如何做的调用超类构造函数。

使用以下代码可以轻松测试:

public class Test
  public Test() {
    // Never called.
    System.out.println("Constructor was called.");
  }

  public static void main(String[] args) {
    Test test = mock(Test.class);
  }

答案 1 :(得分:6)

不,Mockito不会调用模拟类的默认构造函数。