当我将业务对象插入数据库(使用 spring/hibernate)时,有一些日期字段会使用当前日期进行更新。
这是一个重要的功能,所以我想在我的可测试规范中验证它。
问题是我想查看具有正确日期的字段,但由于它是当前日期,因此每次都会更改。
我有一个可行的解决方案,但它太老套了,我无法凭良心做到这一点。
它会是这样的:
@Service
public class DateService {
private Date fixedDate;
public Date getCurrentDate() {
if (fixedDate != null)
return fixedDate;
return new Date();
}
// setter / reset
}
每次我需要一个新的 Date() 时,我都会@autowired 它。然后,当测试时间时,我修正了日期,这样我就知道每个"new"日期都是这个日期。
如何在项目中创建良好的可重复的基于日期的测试?
谢谢
最佳答案
如果您可以更改底层系统,则注入(inject)备用时钟实现效果很好。例如,this answer显示了各种解决方案,包括 Java 8 的 java.time.Clock 接口(interface)。
对于系统测试,您想要测试实际实现,请使用 Concordion 规范,例如:
<p>The invoice date is set to <span c:assertEquals=getInvoiceDate()>today</span></p>
从固定装置方法返回一个字符串值,包含:
- 如果日期是今天,则为“今天”,或者
- 格式化日期(如果日期不是今天)。然后,这将在 Concordion 输出中显示为
今天20/12/2014。
注意:使用这种方法时,请谨慎在午夜运行测试,因为您面临着检索日期和测试日期之间日期发生变化的风险。
关于java - 如何在 BDD 中创建良好的可重复日期测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27601677/