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

标签 java unit-testing static java-6 jmockit

我试图模拟一个单例类(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/

相关文章:

Java 扫描仪找不到单词

java - 通过WIFI从SQL服务器检索数据

unit-testing - 测试 Controller 是否有意义

c# - 静态访问数据库=不好?

java - 如何从 main 方法调用非静态方法?

java - 如何保存 View 组件的位置?

java - 无法解析符号 'DaggerAppComponent'

C#:Web 应用程序的单元测试类

c# - 模拟存储库返回 null

c# - 只有静态方法的类应该是静态的吗?