gpt4 book ai didi

java - 关于单元测试和日期的首选方法是什么?

转载 作者:行者123 更新时间:2023-11-29 08:13:40 24 4
gpt4 key购买 nike

我有一个计算日期的类,我想知道如何最好地测试它。我提出了两种方法,想知道您认为哪种方法“更好”(当然,还有您可能有的任何其他巧妙想法)。

例如,在我的代码中,如果不满足任何条件,则返回从今天算起的一年零一个月的默认日期。

方法一:在单元测试中复制日期计算逻辑:

DateMidnight expectedDefaultDate = new DateMidnight().plusYears(1).plusMonths(1);
assertEquals(expectedDefaultDate , unit.getExpireDate());

方法二:注入(inject)“今天”作为固定时间点和硬编码预期响应日期:

DateMidnight fixedPointInTime = new DateMidnight(2011, 06, 05);
unit.setToday(fixedPointInTime);
DateMidnight expectedDefaultDate = new DateMidnight(2012, 07, 05);
assertEquals(expectedDefaultDate, unit.getExpireDate());

我对这些很纠结。我不太喜欢代码重复,但第一种方法对我来说更清楚预期是什么。您会使用哪个(如果有的话),为什么?

最佳答案

恕我直言,单元测试应具有以下属性:

  1. 可重复
  2. 测试“有趣”的案例

就日期而言,使用“今天”是不好的,因为您运行测试的每一天都不一样。日期的“有趣”情况通常涉及周末、假期、月末/年末等。

过去有一个让我很头疼的例子:基于日期的测试一直有效,直到重要发布前一天你工作了整个周末,发现很多(意外地)失败的测试。如果你整个周末都在工作,你已经承受了很大的压力,真的不需要失败的测试来增加“恐惧、不确定性和怀疑”!

总而言之,不要使用“今天”。如果你真的想测试每个日期,那么不要每天都做,而是在测试中为它编写代码,运行一个循环,日期范围从固定的开始日期延伸到超出预期生命周期的日期系统(然后是一些)。

关于java - 关于单元测试和日期的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6249858/

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