【问题标题】:Understanding Rails Unit Testing: Is it still a unit test if a single test tests model interdependencies?了解 Rails 单元测试:如果单个测试测试模型相互依赖关系,它仍然是单元测试吗?
【发布时间】:2009-12-14 13:02:31
【问题描述】:

除了 Rails 将数据库层合并到单元测试(严格来说不是单元测试)这一事实之外,如果我测试模型的相互依赖性会怎样,例如检查has_many/belongs_to:dependent => :destroy 是否真的破坏了关联项目或加入模型中的项目,以免留下孤儿?

这样的测试应该放在功能测试还是集成测试中更好?

或者用另一种方式问:是否有示例指南,其中包含哪些类型的测试应该在哪里进行以及为什么进行?我没有发现任何真正有用的东西。

【问题讨论】:

    标签: ruby-on-rails unit-testing testing model


    【解决方案1】:

    作为一般经验法则,模型是单元测试的,控制器是功能测试的,集成测试是使用视图完成的。如果您使用 RSpec,您将拥有模型、控制器和视图规范 - 但本质上是测试相同的东西。

    您始终可以模拟操作(使用 Mocha 或 Flexmock 等 gem)以避免对方法的调用实际上执行任何操作 - 但您希望确保发生预期的行为。 (例如,调用 MyClass.create 或 MyClass.destroy)。在控制器/视图测试中尤其如此,我经常会模拟对模型的调用。

    根据我的经验,虽然我通常不会在使用数据库的模型和关联方面遇到问题。您可能想查看 Factory Girl 或其他固定装置的替代品,它们可以更轻松地管理测试对象/数据。

    【讨论】:

      【解决方案2】:

      单元测试中的单元并不总是单个类或对象。测试相互依赖应该不是问题。我还没有找到任何在单元测试中定义单元的硬性规则,但我经常使用领域驱动设计的想法来指导我。测试单个聚合行为的测试通常作为单元测试非常易于维护。依赖更多聚合甚至聚合和服务的测试是集成测试。

      【讨论】:

      • 我发现我可能应该将“单元测试”视为“在封闭的定义良好的环境中进行测试”,而“集成测试”可能会集成我无法直接控制的外部服务。
      猜你喜欢
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 2016-02-19
      • 2014-11-17
      • 1970-01-01
      相关资源
      最近更新 更多