加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails TDD – 首先要写的东西

发布时间:2020-12-17 02:30:41 所属栏目:百科 来源:网络整理
导读:我刚刚使用Rails进入TDD.令我困惑的是“何时编写测试”.所有指南都建议您在编写任何代码之前编写测试,但如果我创建了Person模型,然后在编写任何代码之前编写以下测试; p = Person.newp.firstname = "mikey"p.lastname = "hogarth"assert_equal p.fullname,"m
我刚刚使用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语句,使用字符串格式或其他.只要测试过后,你就知道你很高兴.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读