gpt4 book ai didi

python - 针对时间相关测试数据(或测试数据逐渐变得陈旧)的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:24 24 4
gpt4 key购买 nike

我决定在我的项目中使用 TDD 方法。一开始,我专注于一个用例的一小部分:验证访问代码。
AccessCode 是 Julian 格式的日期,如果小于或等于今天则有效。

第 1 步:编写测试

def test_should_validate_accessdate(self):
assert application.is_accessdate_valid(56746)

第 2 步:运行失败
完成。

第 3 步:使测试通过
在 application.py 中,

def is_accessdate_valid(accessdate):
return True

第四步:跑过去
完成。

第 5 步:重构
没有什么可以重构的。但是,硬编码的返回值很糟糕。

现在,重复:
第 1 步:编写新测试

def test_should_invalidate_accessdate(self):
assert not application.is_accessdate_valid(54990)

第 2 步:运行失败
完成。

第 3 步:使测试通过
在这种情况下,硬编码的返回值很痛苦。所以,我需要删除它,而不是概括一些逻辑以使测试通过。

def is_accessdate_valid(accessdate):
today_julian = julian_to_julian5(calendar_to_julian(datetime.utcnow()))
return accessdate >= today_julian

我仍然不确定我一步迈出如此巨大的飞跃是否做对了。但是,我没有看到其他方法可以在不通过其他测试的情况下使测试通过。欢迎在这里提出建议。

第四步:运行以通过测试
完成。

第 5 步:运行以通过所有测试
完成。

最初,我很自豪我能够通过先为它编写测试来定义一个函数,然后通过更多测试来塑造它。然而,后来我意识到,一旦今天的日期超过输入的 accessdoday 日期,检查有效 accessdate 的测试就会开始失败。我可以做的一件事是提供一个动态计算的输入访问日期:
1. 在今天的日期上加一两天。
2.将上述结果日期转换为julian格式。
3. 使用上述 Julian 结果作为输入 accessdate。

但是,感觉有些不对劲。

我走的路对吗?还是我在某处误入歧途?或者功能设计一开始就错了,假设我应该选择不同的签名?

欢迎任何建议或讨论。

最佳答案

您不想编写依赖于时间的单元测试。因此,编写与作为参数的日期相关的测试——因此保持不变——或使用 jonrsharpe 提到的模拟方法。这留给您的问题只是确定您的确定时间相关组件的机制是否有效,而不是逻辑是否有效。

这也适用于其他环境事物 - 机器名称、目录路径名称、历史股票价格等。

关于python - 针对时间相关测试数据(或测试数据逐渐变得陈旧)的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570585/

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