Java PowerMock-使用私有构造函数模拟单例
我正在将PowerMock与EasyMock一起使用,我想知道如何使用私有构造函数来模拟单例 假设我有以下课程:Java PowerMock-使用私有构造函数模拟单例,java,unit-testing,singleton,powermock,easymock,Java,Unit Testing,Singleton,Powermock,Easymock,我正在将PowerMock与EasyMock一起使用,我想知道如何使用私有构造函数来模拟单例 假设我有以下课程: public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleton; }
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() { }
public static Singleton getInstance() {
return singleton;
}
public int crazyServerStuff() { ... }
}
还有一个类使用这个:
public class Thing {
public Thing() {}
public int doStuff(Singleton s) {
return s.crazyServerStuff() + 42;
}
}
我该如何模仿crazyServerStuff
方法
我尝试了以下方法:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Singleton.class)
public class ThingTest extends AndroidTestCase {
@Test
public void testDoStuff() {
MemberModifier.suppress(MemberModifier.constructor(Singleton.class));
Singleton mockSingleton = PowerMock.createMock(Singleton.class);
...
}
}
但是我得到了错误java.lang.IllegalArgumentException:Singleton类中没有可见的构造函数
有人知道我遗漏了什么吗?我认为您不应该抑制构造函数,而是应该模拟它:
PowerMock.expectNew(Singleton.class).andReturn(mockObject)
遗憾的是,我认为Android不可能做到这一点-请参阅
如果您不在Android上,看起来就是这样做的。谢谢,但是我该如何创建
mockObject
以返回?这不需要调用createMock
?您应该能够使用上面的#createMock()调用,该调用在问题中引发异常:(尝试添加您的测试类以准备注释:@PrepareForTest({Singleton.class,ThingTest.class})我仍然得到异常。感谢您的关注!您还有其他想法吗?