例如,我要设计一个Job
实体。作业具有状态,我需要将Job
标记为完成。
我写了一个markDone()
方法,我想测试一下。因此,要进行断言,我还需要一种方法-isDone()
。但是目前,我没有在我的代码中使用isDone()
方法。
写这样无用的方法取悦TDD可以吗?
答案 0 :(得分:1)
写这样无用的方法取悦TDD可以吗?
是的,但也许不是。
是的:您可以通过简化测试的方式来设计设计,包括创建专门用于可观察性的方法。稍后,当您尝试构建视图以了解生产中正在运行的流程时,此类事情通常会派上用场。
可能不重要的部分:Job :: status的用途是什么?将该状态设置为“完成”时,系统中哪些可观察的行为会发生变化?如果Job :: markDone为空操作,将提交哪些错误?那是您真正想要测试的东西。
例如,可能是您需要能够将作业描述为JSON文档,并且更改作业状态会更改JSON中显示的值。大!测试一下。
job.markDone()
json = job.asJson()
assert "DONE".equals(json.getText("status))
在域层/业务逻辑中,对象很有趣,因为它们如何使用其隐藏的数据结构来响应查询。命令之所以有趣,不是因为它们会改变数据结构,而是因为变异的数据结构会产生不同的查询结果。
答案 1 :(得分:0)
如果该方法在测试之外没有用,那么我将避免编写它,因为您可能会通过另一种方法来检查作业是否完成。职位状态是公开的,还是您有返回职位状态的方法?如果是这样,我将使用它来测试markDone()
是否正常工作。如果没有,则可以使用reflection来检查私有或受保护对象属性的值。
答案 2 :(得分:0)
“ isDone()”是否可以仅驻留在测试项目中,而不能驻留在生产代码中?这样,就不会为了测试而浪费无用的生产代码。