在 Rails 中测试模型的最佳实践是啥?

Posted

技术标签:

【中文标题】在 Rails 中测试模型的最佳实践是啥?【英文标题】:What is the best practice for testing Models in Rails?在 Rails 中测试模型的最佳实践是什么? 【发布时间】:2011-08-16 06:55:58 【问题描述】:

在 Rails 中测试模型应该多少或多少?由于框架基本上为您做了这么多,我想知道是否值得测试生成的 activerecord 方法以确保它们有效。

你们是否通过控制器隐式测试它们?

在 Java 世界中,如果我使用 Hibernate,我必须编写如此多的 ORM 映射内容,以至于测试每个实体的保存/删除/查找非常重要——即使我只是从基类继承这些方法——因为它很容易把映射信息弄错,或者犯一个愚蠢的错误。删除对于测试以确保 Hibernate 能够正确级联非常重要。

但是,由于您根本没有在 rails 中配置任何这些东西......它就是这么简单......它值得测试,还是你只是假设它有效?您是否只是将自己限制在确保关联按预期工作?

最佳做法是什么?有什么好的测试例子吗?我在这里找到了一个页面: http://guides.rubyonrails.org/testing.html

但它并没有专门讨论 ActiveRecord。它更多地关注控制器和其他东西。

谢谢!

【问题讨论】:

【参考方案1】:

我不会尝试测试活动记录等引入的任何方法。 Rails 团队已经对它们进行了测试。他们已经写好了测试用例。

但我会测试我所有的方法,基本上是我在模型中编写的任何自定义代码。首先将它们作为单独的单元进行测试,我将使用单元测试。为了确保整个工作正常(模型控制器等),您可以使用集成测试。

railsguides 对您来说是一个很好的起点。之后你可以挖掘更多有趣的东西。我建议你看看 rspec 和 cucumber。

Cucumber Rspec

更多对你有帮助的***问题(和答案)

Getting Started with RSpec - Looking for tutorials What is Unit test, Integration Test, Smoke test, Regression Test?

【讨论】:

谢谢!我对测试很熟悉——仅在过去的几年里,我可能已经编写了 10,000 个测试;)我只是 ruby​​ 和 rails 的新手。很多地方都专注于用框架做事,而不是测试实践。那我肯定会继续读下去。也许我会找到一个可以下载的好 Rails 应用程序,然后看看他们的测试。 为什么不自己看一下rails ;) 哦,我不是不知道如何测试,我的意思是什么是有意义的,什么是没有意义的。在java世界中,测试你的保存/删除/查找实际上是非常有意义和有价值的,因为如果你不测试它可能会导致错误......但我猜在rails中它不是。此外,测试控制器可能具有与 Spring MVC 非常不同的细微差别——即使概念是相同的。它只是真正地学习差异。但在进入控制器之前,我想先使用模型。【参考方案2】:

不,测试活动记录不是一个好主意,它已经进行了非常广泛的测试,所以你只会在那里浪费时间。

你应该测试你写的任何东西。您编码的任何模型方法都应该经过测试。也就是说,不要测试 Active Record 删除方法是否有效,但如果您的流程实现有效(例如,如果用户单击删除并且他拥有该项目,则它会被删除)。测试行为,而不是测试方法。

看看这个非常好的使用 rspec 测试控制器的演员阵容:

http://railscasts.com/episodes/71-testing-controllers-with-rspec

您提到的资源可能也是最好的 :) 如果您对 rspec 感兴趣,您会在这里找到一些非常好的信息:

http://rspec.info/

【讨论】:

以上是关于在 Rails 中测试模型的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在多个项目中使用相同模型的最佳实践是啥?

使用 Core Data 在视图中引用模型对象的最佳实践是啥?

使用视图模型中的属性值实现方法的最佳实践是啥?

通过视图模型接收 DateTime 输入的最佳实践是啥?

目前持久性的最佳实践是啥?

Rails 中嵌套资源视图的最佳实践?