java - JMockit 模拟 System.currentTimeMillis()

标签 java unit-testing jmockit

运行这个测试:

@Test
public void testSystemCurrentTimeMillis() {
    new NonStrictExpectations(System.class) {{
        System.currentTimeMillis(); result = 1438357206679L;
    }};
    long currentTime = System.currentTimeMillis();
    assertEquals(1438357206679L, currentTime);
}

我得到一个 IllegalStateException:

java.lang.IllegalStateException: Missing invocation to mocked type at this point; please make sure such invocations appear only after the declaration of a suitable mock field or parameter
    at unittests.DateTest$1.(DateTest.java:24)
    at unittests.DateTest.testSystemCurrentTimeMillis(DateTest.java:23)

我的测试 (JMockit 1.18) 有什么问题?

最佳答案

我的最终解决方案是为 System 创建一个 MockUp,它只模拟 currentTimeMillis() 方法:

private static class SystemMock extends MockUp<System> {
    @Mock
    public static long currentTimeMillis() {
        return 10000000L;
    }
}

@Test
public void testAddNowDate() {
    new SystemMock();
    long currentTime = System.currentTimeMillis();
    assertEquals(10000000L, currentTime);
}

关于java - JMockit 模拟 System.currentTimeMillis(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31750244/

相关文章:

java - 链表: Method to verify if the list contains an element?

java - 如何使用构造函数注入(inject)模拟类

javascript - 使用 mocha 和 jsdom 进行 React 单元测试失败

java - @MockClass 不起作用

java - Mac 上的文件路径 : FileNotFoundException

java - 日历 - 获取上个月的最后一天

python - 如何将对象传递给单元测试类

java - 如果构造函数参数之一是 List 类型,是否可以使用 null 参数测试私有(private)构造函数?

jmockit - 如何禁用静态初始化程序?

java - 指定类类型的泛型