1

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

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

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

我有人可以澄清这一点,那就太好了。

谢谢!

4

1 回答 1

5

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

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

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

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

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

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

于 2013-10-25T05:00:40.293 回答