gpt4 book ai didi

java - 我如何模拟提供使用 JMockit 模拟的类的实例的静态方法?

转载 作者:行者123 更新时间:2023-11-30 02:57:54 27 4
gpt4 key购买 nike

我试图模拟一个单例类(SessionDataManager),我通过调用静态 getInstance() 方法获取一个实例,但所有尝试似乎都返回 null。

我已经尝试过

    @Mocked SessionDataManager sessionDataManager;

        new MockUp<SessionDataManager>(){
@Mock
public SessionDataManager getInstance(Invocation invocation) {

return invocation.getInvokedInstance();
}
};

我得到相同的结果= null;

有人可以提出解决方案吗?

谢谢

最佳答案

我建议看看 documentation ,但这里有两个完整的示例测试:

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

关于java - 我如何模拟提供使用 JMockit 模拟的类的实例的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36753107/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com