这是我的源类 -
public class ClassToTest extends AbstractSuperClass<Integer> {
private static final ClassToTest INSTANCE = new ClassToTest(); // (line 1) need to mock this variable
static ClassToTest get() {
return INSTANCE;
}
private ClassToTest() {
super(Integer.class);// (line 2)
}
}
这是我迄今为止测试它的尝试
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassToTest.class)
public class TestClass {
private ClassToTest testClass;
@Before
public void setUp() {
// each of the below attempts fails at line 1 because of the call to line 2 (annotated above).
// Attempt A.
testClass = WhiteBox.newInstance(ClassToTest.class);
//Attempt B.
testClass = mock(ClassToTest.class);
WhiteBox.setInternalState(ClassToTest.class, "INSTANCE", testClass);
}
@Test
public void dummy() {
// irrelevant
}
}
我正在尝试有效地模拟ClassToTest.INSTANCE
并调用它的私有构造函数。我怎么能那样做?
编辑:从AbstractSuperClass
.
public abstract class AbstractSuperClass<V extends Serializable> {
private final CacheClient<V> cache;
private final int seconds;
public AbstractSuperClass(Class<V> valueType) {
cache = new ClientFactory(Config.getAppConfig(), StatisticSet.getGlobalStatistics()).newClient(getCacheType(), valueType);
seconds = Config.getAppConfig().get(getCacheType().getSectionEnum()).getSeconds();
}
PS:我试图避免处理内部问题,AbstractSuperClass
并且最初希望只是简单地模拟调用。我也愿意接受任何重构ClassToTest
以避免这种情况的想法。