【问题标题】:rails integration testing why fixtures rather than dbrails集成测试为什么使用fixtures而不是db
【发布时间】:2013-10-25 04:52:54
【问题描述】:

我是在 Rails 中测试的新手,我不明白为什么或何时应该使用固定装置(或工厂),而不是仅仅为我的测试数据库播种并查询它来运行测试?

在许多情况下,在开发和测试环境中拥有相同的数据应该更快更容易。

例如,如果我想测试一个索引页面,我应该通过工厂创建 100 条记录,还是应该使用 100 条记录为数据库播种?

有人可以澄清一下,那就太好了。

谢谢!

【问题讨论】:

    标签: ruby-on-rails testing capybara integration-testing


    【解决方案1】:

    这其实是一个更深层次的问题,如何高效测试,你会发现很多不同的意见。

    在单元测试中避免使用数据库的原因仅仅是速度。数据库操作很慢。一次测试可能看起来并不慢,但是如果您正在进行持续集成(正如您应该做的那样),或者当您进行快速更改并且只想看看会发生什么时,这些延迟就会加起来。所以更喜欢模拟而不是真正的单元测试代码。

    那么您自己的集成测试应该针对内存数据库而不是您的真实数据库——出于同样的原因,速度。这些将比您的模拟测试慢,但仍比访问真实数据库要快。在开发时,构建-测试-部署周期需要尽可能快。请注意,有些人也将这些称为单元测试。我不会,但我想这只是语义。

    前两种测试是由开发人员为开发人员进行的。

    然后测试人员将访问真实数据库,其中将填充测试人员和主题专家定义的测试数据。还有很多聪明的方法可以加快速度,但这将是他们测试代码与生产类数据库集成的地方。如果你所有的内存数据库测试都通过了并且这里出了问题,那么你就知道这与数据库配置、供应商特定的 SQL 等有关,而不是根本上的坏事。您还将第一次体验演出的感觉。

    请注意,我在这里所说的一切都是有争议的。但希望它能阐明您应该考虑什么时候做某些事情以及为什么做。

    【讨论】:

    • 非常感谢。我在任何地方都找不到这样的答案。总结一下:一切都与速度有关......?
    • 我认为速度和效率。
    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多