Java 今天前N天返回的测试方法
我有点困惑,我有一个返回日期N的方法,但我现在不知道如何测试它:Java 今天前N天返回的测试方法,java,junit,Java,Junit,我有点困惑,我有一个返回日期N的方法,但我现在不知道如何测试它: public String getBeforeDay(int noDays){ Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH,-noDays); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date
public String getBeforeDay(int noDays){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH,-noDays);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = calendar.getTime();
return dateFormat.format(date);
}
@Test
public void testGetBeforeDay(){
assertEquals("2014-04-02", dateService.getBeforeDay(10));
}
由于assertEquals中的字符串是硬编码的,tommorow测试将无法通过。解决此类测试的好方法是什么
解决此类测试的好方法是什么
问题是你依赖于一些短暂的东西:当前的日期/时间
我更喜欢的解决方法是引入时钟的概念,将其作为一个依赖项来处理,就像处理任何其他可以告诉您当前时间的依赖项一样。例如:
public interface Clock {
Date now();
}
然后,您可以有一个使用系统时钟的实现,以及一个用于测试的假实现。在getBeforeDay方法中,可以使用以下命令初始化日历:
我已经在各种项目中非常成功地使用了这种方法,Java8中的java.time包也随之诞生。如果您可能使用java.time而不是java.util.*,请这样做
解决此类测试的好方法是什么
问题是你依赖于一些短暂的东西:当前的日期/时间
我更喜欢的解决方法是引入时钟的概念,将其作为一个依赖项来处理,就像处理任何其他可以告诉您当前时间的依赖项一样。例如:
public interface Clock {
Date now();
}
然后,您可以有一个使用系统时钟的实现,以及一个用于测试的假实现。在getBeforeDay方法中,可以使用以下命令初始化日历:
我已经在各种项目中非常成功地使用了这种方法,Java8中的java.time包也随之诞生。如果您可能使用java.time而不是java.util.*,请这样做