论坛首页 编程语言技术论坛

rspec行为驱动测试中model数据的设计策略

浏览 2544 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-03  
rspec行为驱动测试对数据fixtures使用了convention over configuration策略,一个文件名对应一个表,方便了数据测试前的导入,但是当测试用例涉及的表数量多、表与表之间关系复杂、级联关系比较深的情况下,会发生某些公用数据在多个测试用例中被多次使用的情况,如果测试用例间存在制约关系,比如某个测试用例A是要考察某记录类型的个数,另一个测试用例B对公用数据的使用(新增或者修改记录属性)过程中改变了A的结果,这会使测试用例A发生失败,如果关联度高和复杂的情况下,这种失败几乎是雪崩式的,会使得问题的纠正变得比较复杂,因此为了避免这种情况的发生,如何对测试数据进行设计其策略变得较为重要,对策就是尽可能的使数据不发生公用,某些数据公用不会造成测试用例间发生干涉,而有些数据会发生干涉,对这些会发生干涉的测试数据应该独立出来,即新建立数据,并且防止这些数据在其他测试用例中被其他开发人员修改(可以在yml文件中进行注释说明)
   发表时间:2008-07-03  
对于数据库做的任何操作在每个测试之间都会rollback,并不会出现你说的情况
0 请登录后投票
   发表时间:2008-07-03  
Rspec其实反对Fixture构造测试数据,提倡自己mock数据。
0 请登录后投票
   发表时间:2008-07-04  
chenk85 写道
Rspec其实反对Fixture构造测试数据,提倡自己mock数据。


那么你们是如何做mock的?
0 请登录后投票
   发表时间:2008-07-04  
Quake Wang 写道
对于数据库做的任何操作在每个测试之间都会rollback,并不会出现你说的情况


你如果去做数据统计分析,在关联性紧密情况下就会出现了。这种情况不是transaction而引起的,而是设计测试数据阶段引起的。
0 请登录后投票
   发表时间:2008-07-04  
seemoon 写道
Quake Wang 写道
对于数据库做的任何操作在每个测试之间都会rollback,并不会出现你说的情况


你如果去做数据统计分析,在关联性紧密情况下就会出现了。这种情况不是transaction而引起的,而是设计测试数据阶段引起的。

这种情况你需要隔离这些test fixture,不要把所有的东西都放到一个文件里面。
举例来说:我们可以在spec/fixtures目录下面下新建立一个report目录,在下面放需要做统计或者大批量数据测试的fixture文件。然后在测试代码里面这样写:
describe User do
  self.fixture_path += "report"
  fixtures :users
end
0 请登录后投票
   发表时间:2008-07-04  
测试数据库所有表应该都使用innodb引擎,否则不支持回滚。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics