论坛首页 综合技术论坛

在单元测试中遇到一个很矛盾的问题

浏览 4028 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-22  
由于我们的项目DAO的测试是直接和数据库打交道的,所以在测试的时候就继承了:AbstractTransactionalDataSourceSpringContextTests。所以每次我们测试完成一个POJO的时候都把数据回滚(setComplete())这样就可以不把脏数据放入到数据库中。但是现在问题又来了,由于我们做web层的同事并没有写什么测试,所以他们就直接引用我们的类,所以他们测试就直接操作数据库,比如新增数据;所以这样的话数据库就存在我们无法预测性的数据,但是我们DAO的单元测试在下一次运行的时候就会出现错误,测试而不能通过。可能有的朋友会说,可以考虑使用另一个数据库。可是使用我们使用maven2并没有把测试给除去。。。
   发表时间:2007-07-23  
让他们用MOCK.....
否则粘连过多的话,很难发现是web层的问题还是DAO层的问题
0 请登录后投票
   发表时间:2007-07-23  
在这里,应该有一个方法的,AbstractTransactionalDataSourceSpringContextTests.setComplete()

Overridden to prevent the transaction committing if a number of tables have been cleared, as a defensive measure against accidental permanent wiping of a database.

实际效果,如果你在SpringTest中,add()一个PO。 用了这个方法,就会直接保存到DB中。
0 请登录后投票
   发表时间:2007-07-24  
你們的狀況跟我們的很像
我們的解法是像ror那樣,準備三個database
整合測試有專門測試用的db
然後在測試時,透過取得不同的spring context(application-context.xml)
也就是說不同的設定檔,會取到不同的db
測試時有專用的db,這樣不論在maven,在ide,在整合服務器裡
都以正常的使用
0 请登录后投票
   发表时间:2007-07-24  
ls,是单元测试,没到sit这个级别。
能用mock的,mock。
实在不行的,
准备空库,单元测试类中,先清库,再自行准备测试数据,事务回滚,每个测试用例跑完后依然是空库。

0 请登录后投票
   发表时间:2007-07-24  
用内存库的好处我就不再说了
用夹具生成一些示例数据来进行客户演示的作用也是不错的。
0 请登录后投票
   发表时间:2007-07-25  
使用DBUnit之类的工具, 准备好初始测试数据后,导出到XML文件备份.

在BaseTestCase的setUp中备份当前DB和导入初始数据(速度考虑,仅备份和导入当前TestCase相关的Table),在TearDown中还原刚才备份的数据. 

这样一来,不影响Web层的测试,也不会影响单元测试的结果.

目前发现的缺点,速度有些慢

不知道大家有何建议?Thanks
0 请登录后投票
论坛首页 综合技术版

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