gpt4 book ai didi

java - 返回今天前N天的测试方法

转载 作者:行者123 更新时间:2023-11-29 03:22:06 25 4
gpt4 key购买 nike

我有点困惑,我有一个返回今天前 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 = calendar.getTime();

return dateFormat.format(date);
}

@Test
public void testGetBeforeDay(){
assertEquals("2014-04-02", dateService.getBeforeDay(10));
}

并且由于 assertEquals 中的字符串是硬编码的,明天的测试将不会通过。解决此类测试的最佳做法是什么?

最佳答案

What is a good practise to solve such test?

问题是你依赖于一些短暂的东西:当前日期/时间。

我更喜欢的修复方法是引入 Clock 的概念作为依赖项(与任何其他依赖项一样处理),它可以告诉您当前时间。例如:

public interface Clock {
Date now();
}

然后您可以有一个使用系统时钟的实现,以及一个用于测试的伪造时钟。在您的 getBeforeDay 方法中,您将使用以下方法初始化 Calendar:

calendar.setTime(clock.now());

我已经在各种项目中非常成功地使用了这种方法,Java 8 中的 java.time 包也自带了它。(如果你可以使用 java.time 而不是 java.util.*,这样做!)

关于java - 返回今天前N天的测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23028446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com