Java PowerMock-使用私有构造函数模拟单例

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; }

我正在将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:Singleton类中没有可见的构造函数


有人知道我遗漏了什么吗?

我认为您不应该抑制构造函数,而是应该模拟它:

PowerMock.expectNew(Singleton.class).andReturn(mockObject)

遗憾的是,我认为Android不可能做到这一点-请参阅


如果您不在Android上,看起来就是这样做的。

谢谢,但是我该如何创建
mockObject
以返回?这不需要调用
createMock
?您应该能够使用上面的#createMock()调用,该调用在问题中引发异常:(尝试添加您的测试类以准备注释:@PrepareForTest({Singleton.class,ThingTest.class})我仍然得到异常。感谢您的关注!您还有其他想法吗?