我试图对一些使用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方法。尽管不赞成我也尝试过,但无济于事......
我正在尝试做什么?如果是这样,我做错了什么?
*编辑版本现在起作用。