Rails单元测试的一点点疑惑

今天在做单元测试时发现一个小问题,就是如果运行多个测试类,会因为外键问题无法删除测试数据导致测试失败.如下:

测试类一
ruby 代码
 
  1. require File.dirname(__FILE__) + '/../test_helper'  
  2.   
  3. class ShareTest < Test::Unit::TestCase  
  4.   self.use_transactional_fixtures = true  
  5.   fixtures :users,:share_catagories,:shares  
  6.   # Replace this with your real tests.  
  7.   def test_last_shares  
  8.     assert_not_nil Share.last_shares(5)  
  9.   end  
  10.     
  11. end  

测试类二
ruby 代码
 
  1. require File.dirname(__FILE__) + '/../test_helper'  
  2.   
  3. class BlogTest < Test::Unit::TestCase  
  4.   self.use_transactional_fixtures = true  
  5.   fixtures :users,:blogs,:blog_members  
  6.      
  7.   def test_hearty_seniority  
  8.     assert_not_nil Blog.hearty_seniority(2)  
  9.   end  
  10.   
  11. end  

表间关系:
   user 与 blog 是一对一,blog与 blog_members是一对多, share_catagoriesshares也是一对多,user与shares也是一对多
问题症状:
   如果先运行ShareTest,测试通过.再运行BlogTest时夹具在测试方法运行前初始化数据,实际上是删除表再建表的一个过程,但因为前面运行过ShareTest了,此时在对user表初始时就会发生有外键引用(shares),无法初始化(fixtures),导致测试失败.
解决方法:
   将表间的外键关系删除.

这个问题到也不是什么大问题,后来看了一下typo的建表脚本,确实是没有外键,但有点想不明白,难道在设计数据库时不需要用到外键?还是说在测试时将外键删除掉,正式发布时还在用带有外键的脚本建表.typo已经是一个可以放在生产环境下使用的系统了,它就不需要外键,全部通过程序控制?或者说在Model里定义表关联时用dependent参数来保证外键?

我个人也不喜欢使用各种数据库自有的特性,但外键却是大多数数据库支持的东西,如果仅是因为测试而去除这个强大的功能,好像有点........
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值