我有以下功能:
public static Date getFirstOfLastMonth() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
如何编写一个单元测试来检查该函数返回的值是否与预期值相同,而不使用相同的逻辑来生成预期值?
最佳答案
请参阅其他答案以获取使用 JodaTime 或 Java 8 的建议。不过,这可以使用 java.util.Calendar 来完成。
关键是更改您的方法以传递日期,而不是让它假定当前时间。也许也可以考虑重命名此方法以反射(reflect)其新语义,请参阅 Andreas 对 getFirstOfPreviousMonth
的建议。
您需要将其调用为 getFirstOfLastMonth(new Date())
以保留现有行为,甚至可能使用默认方法
public static Date getFirstOfLastMonth() {
return getFirstOfPreviousMonth(new Date());
}
public static Date getFirstOfPreviousMonth(Date now) {
Calendar cal = Calendar.getInstance();
cal.setTime(now);
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
然后进行一些测试,您可以使用日历来检查结果:
@Test
public void previousYear() {
Calendar input = Calendar.getInstance();
input.clear();
input.set(2009, Calendar.JANUARY, 5);
Date result = getFirstOfLastMonth(input.getTime());
Calendar output = Calendar.getInstance();
output.setTime(result);
assertThat(output.get(Calendar.YEAR), is(2008));
assertThat(output.get(Calendar.MONTH), is(Calendar.DECEMBER));
assertThat(output.get(Calendar.DAY_OF_MONTH), is(1));
}
关于java - 如何测试应返回特定日期的日期函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40664910/