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