gpt4 book ai didi

java - 如何在 BDD 中创建良好的可重复日期测试?

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

当我将业务对象插入数据库(使用 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/

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