我正在使用PowerMock和EasyMock,并想知道如何使用私有构造函数模拟单例?
假设我有以下课程:
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: No visible constructors in class Singleton
有谁知道我错过了什么?
答案 0 :(得分:0)
我不认为你应该压制构造函数,而是模仿它:
PowerMock.expectNew(Singleton.class).andReturn(mockObject)
答案 1 :(得分:0)
可悲的是,我认为这不适用于Android - 请参阅this answer。
如果您不在Android上,看起来this就是这样做的。