我在某个方面尝试了TDD并且已经遇到过这种情况了几次
例如,我的程序需要取一个数字X,并找出X天前的日期字符串,以便执行某些基于日期的查询。
所以我想我需要一个验证日期计算是否正确的测试。
但是,由于测试取决于当前日期,如何创建这样的测试?
我可以让测试方法自己实现这个确切的功能,但这只会使它变得多余......
编辑:我已经看过Setting time and date in JUnit test fixture,但那里的答案似乎对我想要实现的目标有点过分。
答案 0 :(得分:2)
考虑添加另一个抽象层。
执行查询的代码不是使用当前日期,而是接受任何日期,以及从该日期减去的天数。
您是否对此功能进行测试,然后您的更高级别功能将始终传递当前日期。
// don't bother testing this function
def get_some_day_before_today(num_days_ago):
return get_some_day_before_some_date(num_days_ago, Date.now())
// do test this function
def get_some_day_before_some_date(num_days_before, reference_date):
// do stuff
return earlierDate
编辑:一些示例测试
def test_zero_days():
zero_days_before = get_some_day_before_some_date(0, "01/01/16")
assert_equals("01/01/16", zero_days_before)
def test_one_day():
one_day_before = get_some_day_before_some_date(1, "02/01/16")
assert_equals("01/01/16", one_day_before)