我们到底要怎样才能保持测试数据不变。

一. 数据不稳定,我们能否使用不稳定的数据来写测试?
由于我们的测试环境是基于开发数据库,所以数据经常有变化,尤其是统计功能,基本不能对其进行测试。
办法一:我们使用Spring-mock提供的事物来解决测试过程中出现的脏数据以及解决测试过程中会改变数据库状态。
问题一:由于使用Spring-mock在做测试的时候需要准备大量数据,比如对一个查询进行测试,这个查询关联两张表,就会出现如下场景:
对这两张表进行准备数据,new 出很多VO,将关联信息写在VO中,然后调用不同DAO进行持久,之后测试目标代码,如果得到相同结果测试通过。
这样需要在onSetUp方法中写很多VO的初始化代码。并且很多统计涉及的表并不止两张。造成初始化的工作量很大,导致大家不喜欢写测试。

方法二:就使用现有数据+Spring-mock。这样我们在插入、修改、删除操作时使用Spring_mock,统计或者查询的时候使用数据库中现有数据。
问题二:由于使用开发数据库中的现有数据进行测试,导致开发数据库中数据一旦更变就会出现测试跑不通的情况。程序员又要回来修改以前的测试代码,而且是因为数据库中数据变化导致错误。很影响程序员写测试的积极性。导致大家又不写测试了。

方法三:使用DBunit和Spring-mock进行测试。DBunit负责保证测试时数据不变,Spring-mock提供事物处理。
问题三:由于DBunit在团队中普及度并不是很高,如果使用需要培训。而且需要程序员自己去维护XML,虽然提供了导出的接口和方法,但维护起来相对比较麻烦,而且在进行单元测试时需要插入的数据太多,导致测试效率低下(一张表的单表维护大概要3倍以上的时间)。总之属于很耗费资源而且成本偏高。并且一但表结构改动,相关的测试数据需要重新维护一次。

方法四:使用TestDB+Spring_mock,TestDB保证本身数据不变化。培训成本为0。
问题四:如果使用TestDB来测试,如果表结构改变,就需要同步开发数据库以及测试数据库。如果进行了同步,相关的数据也会变化。导致测试失败。




以上是在我们测试的时候所遇到的一些问题,不知道大家都是如何解决测试数据不变问题的。简单总结过后发现自己心情好多,希望大家可以提供一些意见和方法。我们都是为了写出健壮的代码,正确的行为,获得重构的勇气。
加油!!!

猜你喜欢

转载自yh-private.iteye.com/blog/221103