我刚开始学习使用Rails进行TDD。有一个问题让我感到困惑,那就是“何时编写测试”。所有的指南都建议在编写任何代码之前编写测试,但如果我创建了一个Person模型,并在编写任何代码之前编写以下测试;
p = Person.new
p.firstname = "mikey"
p.lastname = "hogarth"
assert_equal p.fullname, "mikey hogarth"
如果我没有实现“fullname”方法,测试本身将不会失败,而是会崩溃!我会收到一个运行时错误。因此,在编写代码之前,我无法使该测试失败。
TDD程序员通常如何处理这种情况?基本上是使用虚拟方法存根,还是有更好的方法?
===编辑===
提出了许多很好的想法。最终,我决定以下选项最优雅地实现了我想要做的事情;
if p.respond_to? "fullname"
assert_equal "Mikey Hogarth", p.fullname
else
flunk "fullname not implemented"
end
===第二次编辑===
如果你看到了这个答案,似乎我的TDD方法存在问题,所以虽然上面的代码可以工作,但并不是好的实践。