我如何模拟提供被 JMockit 模拟的类的实例的静态方法? [英] how do i mock the a static method that provides an instance of the class being mocked with JMockit?
本文介绍了我如何模拟提供被 JMockit 模拟的类的实例的静态方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试模拟一个单例类 (SessionDataManager),在该类中我通过调用静态 getInstance() 方法获取实例,但所有尝试似乎都返回 null.
I'm trying to mock a singleton class (SessionDataManager) where I get an instance by calling the static getInstance() method but all attempts seem to return null.
我试过了
@Mocked SessionDataManager sessionDataManager;
或
new MockUp<SessionDataManager>(){
@Mock
public SessionDataManager getInstance(Invocation invocation) {
return invocation.getInvokedInstance();
}
};
我得到相同的结果 = null;
I get the same result = null;
有人可以提出解决方案吗?
Can anyone suggestion a solution?
谢谢
推荐答案
我建议查看文档,但这里有两个完整的示例测试:
I would suggest having a look at the documentation, but here are two complete example tests:
public final class ExampleTest {
public static final class SessionDataManager {
private static final SessionDataManager instance = new SessionDataManager();
public static SessionDataManager getInstance() { return instance; }
public void doSomething() { throw new UnsupportedOperationException("to do"); }
}
@Test
public void mockingASingleton(@Mocked SessionDataManager mockInstance) {
SessionDataManager singletonInstance = SessionDataManager.getInstance();
assertSame(mockInstance, singletonInstance);
singletonInstance.doSomething(); // mocked, won't throw
}
@Test
public void mockingASingletonWithAMockUp() {
new MockUp<SessionDataManager>() {
// no point in having a @Mock getInstance() here
@Mock void doSomething() { /* whatever */ }
};
SessionDataManager singletonInstance = SessionDataManager.getInstance();
singletonInstance.doSomething(); // redirects to the @Mock method, won't throw
}
}
这篇关于我如何模拟提供被 JMockit 模拟的类的实例的静态方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文