单元测试:使用mockito或powermock模拟工厂方法

时间:2011-09-16 05:56:01

标签: unit-testing mockito powermock

我有一个具有以下结构的课程

public class MyClass{
   private MyClass(){
   }

   public static MyClass getInstance(){
       return new MyClass();
   }

   //some instance method.
}

使用powermock我能够模拟" MyClass"如下。

PowerMock.mockStaticClass(Myclass.class);

但是当有人在MyClass上调用getInstance()时,我无法返回任何有效对象。 即,我如何填写以下空格。

Mock.when(MyClass.getInstance()).thenReturn(<What do I return here>);

需要返回值,因为我需要存根/验证一些实例方法。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您可以模拟实例以及静态方法,并使模拟的静态方法返回对模拟实例的引用。类似的东西:

MyClass mock = PowerMock.mockClass(MyClass.class);

PowerMock.mockStaticClass(MyClass.class);
Mock.when(MyClass.getInstance()).thenReturn(mock);

(我从未使用过PowerMock,因此语法可能有点错误......)