ruby-on-rails – Rails TDD – 首先要写的东西
我刚刚使用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的整个方法都是问题,所以虽然上面的代码可行,但这并不是一个好习惯. 解决方法
你想写你希望的代码.在C风格的语言/静态编译的语言中,上面甚至不会编译,因为你正确地说明代码不存在.这很好,然后您将实现最低限度来构建代码以运行测试.换句话说,您的测试可以推动您的设计.
我的Ruby非常生疏,但在上面的示例中,对于不存在的方法/属性,将抛出method_missing行的内容.因此你会创建它们. class Person attr_accessor :firstname,:lastname def fullname end end 如果你现在运行测试,你将从全名返回nil.因此,我们将实现fullname方法.这里需要注意的是,消息已经改变,而不是Ruby抱怨丢失的方法,测试是抱怨我们没有正确实现方法. def fullname return @firstname + " " + @lastname end 现在你的测试将通过. 基本上你想要改变你的测试在运行后显示的消息(这将证明你正在某个地方),或者你想让它通过.测试通过后,您可以重构.上面的方法很简单,但你可以删除return语句,使用字符串格式或其他.只要测试过后,你就知道你很高兴. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |