【问题标题】:How to mock Calendar.getInstance for Java Testing using Mockito?如何使用 Mockito 模拟 Calendar.getInstance 以进行 Java 测试?
【发布时间】:2020-08-05 13:13:48
【问题描述】:

我有一段代码要测试-

public class Test {

    public List<Long> getListExpiryTime(long time){
        List<Long> tempList = new ArrayList<Long>();
        tempList.add(getExpiryTime(time));
        return tempList;
    }


    private long getExpiryTime(long time) {
        long currentTime = Calendar.getInstance().getTimeInMillis();
        return time - currentTime / 1000;
    }

}

我想在我给出输入时间后测试返回的列表是否具有一定的值,我们模拟Calendar.getInstance().getTimeInMillis();。我该怎么做?我更喜欢使用 Mockito 来做到这一点

【问题讨论】:

    标签: unit-testing testing junit mockito powermockito


    【解决方案1】:

    Calendar.getInstance 是一个静态方法,不能用 Mockito 模拟。 PowerMockito 可能会有所帮助,但我强烈建议不要使用日历并使用 java.time 中的新时间 API。您的业​​务组件会注入一个时钟,您可以使用 Mockito 轻松模拟它。

    【讨论】:

      【解决方案2】:

      创建一个方法,例如getCurrentTime() 仅在 Helper 这样的新类中返回 Calendar.getInstance().getTimeInMillis();

      然后你可以像这样模拟这个方法:

      Calendar date = new GregorianCalendar();
      date.set(...)
      Mockito.when(helperMock.getCurrentTime()).thenReturn(date);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多