【发布时间】:2011-01-28 06:50:15
【问题描述】:
我正在开发一个 ETL 流程,将业务数据从一个数据库提取到数据仓库。该应用程序未使用 NHibinate、Linq to Sql 或实体框架。该应用程序有自己生成的数据访问类,这些类会生成执行 CUID 所需的 SQL 语句。
正如想象的那样,编写生成自定义 SQL 的代码的开发人员很容易犯错误。
我想编写一个程序来生成测试数据 (Arrange),而不是执行 ETL 过程 (Act) 并验证数据仓库 (Assert)。
我认为编写这样的程序并不难。然而,我担心的是,在过去,我的公司曾尝试做类似的事情,并最终导致一系列不可维护的单元测试不断失败,因为随着新功能的添加,数据库架构发生了许多新的变化。
我的计划是编写一个在构建机器上运行的集成测试,而不是任何单元测试来确保 ETL 过程正常工作。由于确定数据如何加载到数据仓库的业务逻辑,测试数据不能完全随机生成。我们有自定义开发工具,可以在数据库定义发生变化时生成新的数据访问类。
我希望社区提供任何反馈,让我就编写易于维护的集成测试提供建议。我的一些想法:
在版本控制(TFS)中保存备份测试数据库,当源或数据仓库发生数据更改时,开发人员需要修改备份数据库。
开发人员需要通过测试程序(在本例中为 C#)手动维护测试数据。该程序将有一个基本框架供开发人员生成测试数据。
初始化测试数据库时,它会生成随机数据。开发人员需要编写代码来覆盖某些随机生成的数据,以确保测试通过。
我欢迎任何建议 谢谢
【问题讨论】:
标签: c# .net sql-server unit-testing integration-testing