代码之家  ›  专栏  ›  技术社区  ›  Andriy Buday

数据库单元测试。对于运行CI、具有分支和重型数据库的企业解决方案,最佳的数据库测试方法是什么?

  •  2
  • Andriy Buday  · 技术社区  · 14 年前

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

    目前,许多团队正在继续对项目进行更改,这些更改将被处理到不同的分支。构建环境以CI方式建立。所以我们面临着维护这些测试的问题。我们在保持测试运行上花费了太多的时间和精力。因为具有测试数据的数据库非常庞大,我们不能为每个分支单独建立数据库,但是我们可以为每个分支保持清晰的示例数据库(200MB),但在这种情况下,许多测试都将失败。

    我已经考虑过了,有一些初步计划,比如 :

    1)通过删除数据相关测试,或者(如果可能)重写以插入数据并在测试执行后立即回滚,从而摆脱数据相关测试。

    2)在单独的项目中移动所有特定于数据库的测试,即将集成测试与常规单元测试分开。

    3)为每个分支创建示例数据库,并分别运行集成测试。

    我很高兴听到你在你的项目中解决了类似的情况。您是否分离了集成测试,并且曾经进行过特定于数据的测试?是否建议进行数据相关测试?如有任何建议,我们将不胜感激。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Henrik    14 年前

    对于我们当前的项目,我们已经将CI从单元测试中分离出来,这正是您描述的方式,而且它工作得很好。通过移动到 NHibernate 我们可以自由使用内存数据库( SQLite )为了测试不容易被模拟*的数据相关代码,我们还针对测试服务器本地SQL Server运行了一些集成类型测试。所有这些测试都指定了MBUnit Rollback2-attribute 两者都插入所需的数据并在同一轮中查询,这样数据库就不会被测试修改。

    nUn+ SharpTestEx 用于单元测试。

    *例如,测试集合级联映射和集合的测试、IEquatable以及正确映射旧表架构。