编程语言
首页 > 编程语言> > JUnit与Java 8时钟

JUnit与Java 8时钟

作者:互联网

想象一下,我想要测试以下课程:

class Times {

    Clock cl = Clock.systemDefaultZone();

    public int changeTime() {
        LocalDate ld = LocalDate.now(cl);
        if(ld.getMonth().equals(Month.OCTOBER))
            return 1;
        if(ld.getMonth().equals(Month.NOVEMBER))
            return 2;
        return 0;
    }
}

如何强制日期在11月并断言该方法返回2?

我正在使用JUnit和Mockito.

解决方法:

假设Times类中有一个Clock对象的setter,你可以这样做:

Times times = new Times();
Clock fixedClockInNovember = Clock.fixed(Instant.parse("2015-11-01T00:00:00.00Z"), ZoneId.of("UTC"));
times.setClock(fixedClockInNovember);
assertEquals(2, times.changeTime());

在此代码中,创建固定时钟.这模拟了给定时刻的恒定时间,即11月.

因此,对LocalDate.now(时钟)的任何调用将始终在11月返回相同的日期.

标签:java,java-8,junit,java-time
来源: https://codeday.me/bug/20190829/1762468.html