对大型数据库进行单元测试

emp*_*mpi 7 database tdd unit-testing

我想问一下你对大型数据库进行单元测试的建议.

我想为一个主要在T-SQL中实现的应用程序编写单元测试,因此不能选择模拟数据库.数据库非常大(大约10GB),因此在测试运行后恢复数据库实际上也是不可能的.

该应用程序的目的是管理信用协议申请的处理.有特定角色的用户可以更改agreement对象的状态,我的工作是测试此过程的一部分.

我正在考虑两种方法:

第一种方法

创建符合特定条件的协议,然后测试协议状态的更改(例如,从在某个办公室等待到在此特定办公室处理的过渡).协议将在应用程序本身中创建,它们将成为我的测试用例.所有测试都将在执行这些测试后回滚的事务中.

好处

这种方法的优点是非常简单的测试.可以很容易地描述预期的数据,因为我确切地知道在转换之后对象应该是什么样子.

缺点

缺点是数据库不能以破坏测试的方式改变.测试用例中使用的用户和协议必须始终相同,如果需要更改数据库,则必须重复准备过程.


第二种方法

在单元测试中创建协议.以编程方式创建符合特定条件的协议.用于创建协议的数据将随机选择.此外,将随机创建将更改协议状态的用户.

好处

这种方法的优点是易于对对象进行更改,并且能够在具有不同数据的数据库上运行测试.

缺点

两个对象(协议和用户)都有很多字段和相关数据,我担心实现这些对象的创建需要一些时间(我也害怕这些对象可能包含一些错误,因为创建方法会相当很难实现没有错误).


您如何看待这两种方法?

任何Stack Overflow读者都认为按照第二种方法描述创建对象是否值得?

这里有没有人有创建此类测试的经验?

Bra*_*ugh 3

我不确定我是否完全同意您的假设,即在测试运行后无法恢复数据库。虽然我绝对同意某些测试应该在全尺寸、多 TB 的数据库上运行,但我不明白为什么不能在小得多的测试数据库上运行大部分测试。是否存在需要测试的约束,例如“相同行不能超过十亿?”

我的建议实际上是对大多数功能规格使用较小的测试数据库,并在每次测试时创建/删除其所有表,并使用测试功能所需的尽可能少的示例数据。