- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我决定在我的项目中使用 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/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!