Ruby on rails 理解Rails单元测试:如果单个测试测试模型的相互依赖性,那么它仍然是一个单元测试吗?

Ruby on rails 理解Rails单元测试:如果单个测试测试模型的相互依赖性,那么它仍然是一个单元测试吗?,ruby-on-rails,unit-testing,testing,model,Ruby On Rails,Unit Testing,Testing,Model,除了Rails将数据库层合并到单元测试(严格来说,这不是单元测试)中这一事实之外,如果我测试模型的相互依赖性,例如,检查是否有许多/属于和:dependent=>:destroy确实销毁了关联项目或联接模型中的项目,以避免留下孤立项 这样的测试是否应该更好地放在功能测试或集成测试中 或者用另一种方式问:有没有一个例子指导哪种测试应该去哪里,为什么?我没有发现任何真正有用的东西。单元测试中的单元并不总是单个类或对象。测试相互依赖性不应该是个问题。我还没有找到任何在单元测试中定义单元的硬性规则,但我

除了Rails将数据库层合并到单元测试(严格来说,这不是单元测试)中这一事实之外,如果我测试模型的相互依赖性,例如,检查
是否有许多
/
属于
:dependent=>:destroy
确实销毁了关联项目或联接模型中的项目,以避免留下孤立项

这样的测试是否应该更好地放在功能测试或集成测试中


或者用另一种方式问:有没有一个例子指导哪种测试应该去哪里,为什么?我没有发现任何真正有用的东西。

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

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

一般来说,模型是单元测试,控制器是功能测试,集成测试是通过视图完成的。如果您使用的是RSpec,那么您将拥有模型、控制器和视图规范——但本质上是测试相同的东西

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


但根据我的经验,我通常不会对使用数据库的模型和关联产生问题。您可能想看看Factory Girl或夹具的一些替代品,它们使管理测试对象/数据更容易。

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

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


但根据我的经验,我通常不会对使用数据库的模型和关联产生问题。您可能想看看Factory Girl或Fixture的一些替代品,它们使管理测试对象/数据变得更容易。

我发现我可能应该将“单元测试”视为“在封闭的定义良好的环境中测试”,而将“集成测试”视为“集成测试”可能会集成我无法直接控制的外部服务。我发现我可能应该将“单元测试”视为“在封闭的定义良好的环境中进行测试”,而“集成测试”可能会集成我无法直接控制的外部服务。