假设我有一个用户类有一个方法is_old_enough?TDD是否意味着我必须为每种方法编写一个测试,不管它有多复杂?
该方法只是检查年龄超过18岁。看起来很简单。
TDD是否意味着我必须为此写一个测试,即使它很微不足道?
class User
def is_old_enough?
self.age >= 18
end
end
如果是这样,为什么?为此编写测试有什么好处?你只需要测试x> = y是否符合你期望> =操作符的工作方式。
因为我看到的情况是最有可能的情况是:
原来的年龄实际上应该是21.这是该测试没有赶上一个错误,因为他们有错误的假设,当我们写代码。然后他们进入并将方法更改为> = 21。但是现在测试失败!所以他们必须去改变测试。所以测试没有帮助,并且在重构时实际上给出了误报。
看起来像这样简单的方法测试实际上没有测试任何有用的东西,实际上是伤害你。
我认为“测试驱动”是指你测试你的代码。这并不意味着你必须变得愚蠢。另一方面,有时候相对简单的代码可能会有错误。如果有人在一个地方改变了定义,测试可能会失败。您必须同时进行积极和消极的测试(例如“过关18分,失败17分”)。如果限制更改为16,则您的第二个测试现在将失败。我总是告诉人们:“当你学习新的东西时,不要拔掉常识模块为新信息留出空间”。 – Floris
使用TDD,您不需要为方法编写测试,而是为测试编写一个或多个方法。你首先写一个描述一些理想但尚未实现的行为的测试。然后你写出必要的代码来通过测试。 –