是否值得尝试尽可能多地重用测试夹具?

时间:2014-11-13 14:18:57

标签: ruby-on-rails testing minitest

我必须在现有项目上使用Rails灯具。切换到FactoryGirl等不是一种选择。

在我的灯具中,我通常有一些通用的(最常出现在生产数据库中的记录)加上用于测试边缘情况的相当一部分灯具。在博客应用的情况下,后者可能是没有帖子的博客,暂时没有活跃的博客,或没有粉丝的博客。

您为每个边缘案例创建一组单独的灯具记录与尝试尽可能多地重用现有灯具有何关系?后者可能包括对特定方法的模拟/存根调用(例如Account.any_instance.expects(:post_limit).returns(1000)Mocha)或甚至创建与应用程序逻辑不一致的记录(例如,当您的应用只允许有一个用户时,每个帐户有几个用户每个帐户的用户)。

1 个答案:

答案 0 :(得分:1)

我避免为不常见的用例创建数据夹具。但是如果我在应用程序的多个部分中检查了一些场景,那么我会在灯具中创建它们,因为我认为它是应用程序测试语言的一部分。

对于边缘情况,我在测试中创建数据。通过修改已知的夹具记录,或通过创建满足边缘情况标准的新记录。您不需要像Factory Girl这样的工具来创建可重复使用的工厂。 (每个ActiveRecord模型都是一个工厂。)您可以在模块中创建一些命名良好的方法,然后将其包含在您的测试类中。

我不会像你概述的那样嘲笑你的模特。我会在测试中创建记录,然后测试应用程序的行为是否正确。

def test_lots_of_posts
  account = new_account_with_n_posts 100
  assert(account.posts > 5)
end

def new_account_with_n_posts count
  account = Account.create! name: "Temp Account"
  count.times do |n|
    account.posts.create! title: "Temp Post #{n}"
  end
  account
end