Unit testing 单元测试:使用mockito或powermock模拟工厂方法
我有一个具有以下结构的类Unit testing 单元测试:使用mockito或powermock模拟工厂方法,unit-testing,mockito,powermock,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); 但当有人在My
public class MyClass{
private MyClass(){
}
public static MyClass getInstance(){
return new MyClass();
}
//some instance method.
}
使用powermock,我可以模拟“MyClass”,如下所示
PowerMock.mockStaticClass(Myclass.class);
但当有人在MyClass上调用getInstance()时,我无法返回任何有效对象。
i、 例如,如何填写以下空白
Mock.when(MyClass.getInstance()).thenReturn(<What do I return here>);
Mock.when(MyClass.getInstance()).thenReturn();
返回值是必需的,因为我需要存根/验证一些实例方法
有人能帮我解决这个问题吗?您可以模拟实例和静态方法,并使模拟静态方法返回对模拟实例的引用。比如:
MyClass mock = PowerMock.mockClass(MyClass.class);
PowerMock.mockStaticClass(MyClass.class);
Mock.when(MyClass.getInstance()).thenReturn(mock);
(我从未使用过PowerMock,因此语法可能有点错误……那么你想做什么?您可以创建真实类的实例,也可以创建模拟。你说你“无法返回任何有效对象”-什么阻止了你?我不能返回对象,因为构造函数是私有的。啊,我明白了。。。但你是在试图回击一个嘲笑者吗?如果您尝试
PowerMock.mockClass
,会发生什么情况?@Jon Skeet我对您建议的方法有疑问。在我正在测试的方法中,我调用了MyClass.getInstance()
方法,并从getInstance()
返回的对象调用了实例方法。在测试中,我没有存根getInstance()
。我只是存根了实例方法。当被测方法实际调用MyClass.getInstance()
时会发生什么?我不是建议替换mockStaticClass
调用-我是建议从thenReturn
返回的值应该是实例方法的模拟值。