【发布时间】:2010-09-02 18:28:53
【问题描述】:
我已经编写测试有一段时间了,现在我开始掌握事情的窍门。但是我有一些关于真正需要多少测试覆盖率的问题。共识似乎很明确:更多的报道总是更好。但是,至少从初学者的角度来看,我想知道这是不是真的。
以这个完全普通的控制器动作为例:
def create
@event = Event.new(params[:event])
if @event.save
flash[:notice] = "Event successfully created."
redirect_to events_path
else
render :action => 'new'
end
end
只是生成的脚手架。我们在这里没有做任何不寻常的事情。为什么为此操作编写控制器测试很重要?毕竟,我们甚至没有编写代码——生成器为我们完成了工作。除非 Rails 中存在错误,否则这段代码应该没问题。似乎测试这个动作与测试并没有太大的不同,比如说,collection_select - 我们不会那样做。此外,假设我们使用的是黄瓜,我们应该已经涵盖了基础知识(例如重定向的位置)。
对于简单的模型方法也是如此。例如:
def full_name
"#{first_name} #{last_name}"
end
我们真的需要为这些简单的方法编写测试吗?如果存在语法错误,您将在页面刷新时发现它。同样,只要您的功能点击任何调用 full_name 方法的页面,黄瓜就会捕捉到这一点。显然,我们不应该依赖黄瓜来做任何过于复杂的事情。但是 full_name 真的需要单元测试吗?
您可能会说,因为代码很简单,所以测试也很简单。所以你不妨写一个测试,因为它只需要一分钟。但似乎编写本质上毫无价值的测试弊大于利。例如,它们会使您的规格变得混乱,从而使您更难以专注于真正重要的复杂测试。此外,它们需要时间来运行(尽管可能并不多)。
但是,就像我说的,我几乎不是专业的测试人员。我不一定提倡减少测试覆盖率。相反,我正在寻找一些专家的建议。编写如此简单的测试真的有充分的理由吗?
【问题讨论】:
标签: ruby-on-rails rspec testing