测试驱动开发和KISS

时间:2019-07-09 19:44:18

标签: php unit-testing tdd

例如,我要设计一个Job实体。作业具有状态,我需要将Job标记为完成

我写了一个markDone()方法,我想测试一下。因此,要进行断言,我还需要一种方法-isDone()。但是目前,我没有在我的代码中使用isDone()方法。

写这样无用的方法取悦TDD可以吗?

3 个答案:

答案 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()”是否可以仅驻留在测试项目中,而不能驻留在生产代码中?这样,就不会为了测试而浪费无用的生产代码。