我正在尝试对一些使用 Singleton 类的类进行单元测试,该类的构造函数做了一些我在单元测试环境中不能(也不应该)做的事情。我的理想方案是最终完全抑制构造函数,然后将我的测试类调用的其他成员方法排除在外。我的问题是我似乎无法抑制构造函数。
我对解决此问题的方法的理解如下:
public class MySingleton extends AbstractSingletonParent {
public final static MySingleton Only = new MySingleton();
private MySingleton(){
super(someVar); // I want the super-class constructor to not be called
//
//more code I want to avoid
}
public Object stubbedMethod() {}
}
public class ClassToBeTested {
public void SomeMethod(){
Object o = MySingleton.Only.stubbedMethod();
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(MySingleton.class)
public class TestClass {
@Test
public void SomeTest() {
suppress(constructor(MySingleton.class));
mockStatic(MySingleton.class);
PowerMock.replay(MySingleton.class);
// invoke ClassToBeTested, etc
PowerMock.verify(MySingleton.class);
//make some assertions
}
}
不幸的是,在 createMock 调用期间,MySingleton 构造函数被命中,它仍然调用超级构造函数。
我在做傻事吗?我在网上找到了一个几乎完全一样的例子,但它使用了不推荐使用的 suppressConstructor 方法。尽管被弃用,我也尝试过,但无济于事......
我正在尝试做的事情可能吗?如果是这样,我做错了什么?
*编辑版本现在可以使用。