数据库单元测试。运行CI的企业解决方案的最佳数据库测试方法是什么,拥有分支机构和繁重的数据库?

时间:2010-10-17 21:05:26

标签: .net database unit-testing continuous-integration integration-testing

所以情况如下: 我们有一些非常古老的产品,有十几个解决方案。他们中的许多人运行不同的单元测试,一些是MSTest,一些是NUnit。测试数据库有很多测试,也有一些依赖于数据。换句话说,他们执行代码来检查客户Andriy是否订购了产品A和B.我知道这是错误的,但我说这个产品是由很多团队在不同时间开发的。

目前,许多团队正在继续对项目进行更改,并将更改发送到不同的分支机构。构建环境以CI方式建立。所以我们面临维护这些测试的问题。我们花了太多时间和精力来保持测试运行。因为包含测试数据的数据库非常繁重,所以每个分支都不能有单独的数据库,但我们可以为每个分支保留清晰的样本数据库(200Mb),但在这种情况下,许多测试都会失败。

我已经考虑过这个并且有一些初步计划,例如

1)通过删除它们或(如果可能的话)重写以插入数据并在测试执行后立即回滚来摆脱数据相关的测试。

2)将所有特定于数据库的测试移到单独的项目中 - 即将集成测试与通常的单元测试分开

3)为每个分支创建样本数据库并单独运行集成测试。

我很想听听您在项目中如何解决类似情况。您是否将集成测试分开,并且您是否曾进行过特定数据测试。是否建议完全依赖数据进行测试?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于我们当前的项目,我们将CI-与单元测试分开,完全按照您描述的方式进行,并且运行良好。通过移动到NHibernate,我们可以自由地使用内存数据库(SQLite)来测试无法轻易模拟的数据相关代码*,但我们也运行了一些集成类型测试对测试服务器本地SQL Server。所有这些测试都指定了MbUnit Rollback2-attribute并且都插入了他们需要的数据并在同一轮中查询它,以便测试不会修改数据库。

NUnit + SharpTestEx用于单元测试。

*例如测试集合级联映射和集合的测试,IEquatable以及遗留表模式是否正确映射。