代码之家  ›  专栏  ›  技术社区  ›  Chirantan

是否需要单元测试活动记录验证?

  •  8
  • Chirantan  · 技术社区  · 16 年前

    是否需要单元测试活动记录验证,或者它们已经过很好的测试,因此足够可靠?

    4 回复  |  直到 15 年前
        1
  •  15
  •   krusty.ar    16 年前

    验证本身应该是可信的,但您可能需要检查验证是否存在。

    换句话说,测试某个东西的一个好方法就是把它当作一个黑盒子,从实现中抽象出测试,例如,您可能有一个测试,它检查一个人员模型是否没有名字就不能保存,但不关心人员类如何执行验证。

        2
  •  4
  •   Mike Woodhouse    16 年前

    可以接受的是,像ActiveRecord这样的库在开发人员的测试中比您更好:对他们来说,这是一个主要的问题,对您来说,这充其量是无关紧要的。

    这并不是说不会有错误——很久以前我发现过一个很小的MS SQL Server适配器——但是您可能要实现的测试类型极不可能公开它们,因为它们很可能是边缘情况。如果你 找到一个bug,当然,如果你用一个暴露它的测试用例来报告它,它可能会非常有用!

    如果我想更好地理解库实现的某个特定方面,我只会测试ActiveRecord内部。我不会在任何应用程序项目中包含这些探索性测试,因为它们与项目并不真正相关。

    一般来说,您应该为自己编写的代码编写测试:如果您生活或尝试生活在一个TDD世界中,那么测试应该在之前编写。如果您的模型有验证规则,那么您几乎可以肯定地编写测试来确保规则存在。在大多数情况下,测试将是琐碎的,但是如果将来某个时候不经意删除了一行,它们将非常有用…

        3
  •  3
  •   Andrew Vit    16 年前

    正如迈克所写,至少你应该测试验证是否存在。这只是一点复式会计(健全检查)是很容易做到的。

    根据具体情况,还应该测试您的模型在特定情况下是否有效。例如,如果您的字段需要某种格式,则测试有效和无效的示例格式。通过阅读测试中的几个示例,更容易了解这意味着什么:

    class Person < ActiveRecord::Base
      validates_format_of :email,
          :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
    end
    

    是的,验证测试得很好,足够可靠。但是正确使用验证是您想要验证的。

        4
  •  0
  •   Andrew Grimm atk    15 年前

    作为旁注,RyanBigg的博客帖子 has_and_belongs_to_many double insert 提到有人在ActiveRecord中遇到了一个错误(尽管与验证无关)。正如他指出的,不要假设Rails不可能有bug,因为我们知道有900张Rails的开放票。

    但是,是的,您编写测试的主要原因是检查ActiveRecord的使用是否正确。