.net – 在数据库上运行测试的策略
我已经开始研究一个包含1800多个功能/集成测试的现有项目.这些都是用MSTest编码的.
其中许多直接连接到SQL Server数据库.数据库由代码生成器生成,代码生成器在许多方面创建数据库.生成数据库很慢而且很麻烦. 这有以下问题: >测试清理db,这意味着我们必须为测试维护一个单独的db,而另一个使用该应用程序.现在的过程是在运行测试和运行应用程序之间进行更改时更改数据库. 我希望现有的测试不依赖于这样的安装,如果可能的话运行得更快,而不必通过代码生成器,杂耍连接字符串等来处理维护数据库. 我试图尽快实现这一点,因为重写测试不在预算范围内.我已经引入了模拟来帮助新测试减少对数据库的依赖,我现在的问题是现有的测试. 我的第一个问题是将我们的基本单元测试类更改为连接到SQLite数据库,该数据库将由代码生成器创建,该代码生成器已生成主数据库而不是SQL Server数据库.然后可以删除SQLite并在每次运行之间重新复制到测试文件夹.这本来很快,不需要2个SQL Server数据库,事实上如果只是运行测试,则不需要SQL Server安装. 我的问题是生成的代码使用了SQLite中没有包含的许多概念; T-SQL,SQL Server特定语法,模式,存储过程和嵌入式clr程序集. 然后我尝试了SQL Server CE 4,它有许多与SQLite相同的限制. 除了重写代码以与SQLite(或CE)兼容,重写现有测试或我们维护2 seperatedb的系统之外,还有其他可用的替代方案吗? 编辑:将单元测试更改为功能测试,澄清了一些事情.把一些东西放大胆. 解决方法如果要连接到数据库或任何其他资源,则不是单元测试.适当的单元测试被隔离到被测单元或您的班级.应该嘲笑被测单元之外的任何东西.我不是.NET开发人员所以我不能推荐最好的Mocking框架/工具,但也许是this question will point you in the right direction. 为什么单元测试不应该访问资源: 你会想要以不同的方式看待这个问题.您没有任何测试数据库本身的愿望,因为您必须假设您正在使用的数据库产品正常工作.因此,没有必要测试“$dao-> save()”实际插入记录.您可能感兴趣的是在完成某些其他操作时是否正在调用save()方法,或者您的DAO是否生成了正确的INSERT语句. 如果你必须在单元测试中进行数据库调用,因为你不能模拟进行数据库调用的对象,你需要重构. 肥皂盒时间: 这就是测试驱动开发如此有益的原因.从一开始就强调要保持脱钩和隔离,从而带来更好的整体设计,灵活性和可测试性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 删除SQL Server上的所有扩展属性
- SQL事件探查器可以在查询旁边显示返回结果集吗?
- 复杂的SQL查询 – 查找匹配多个不同外键的项目
- 从SQL Server中检索varbinary(MAX)到C#中的byte
- SQLServer之Compute/ComputeBy实现数据汇总
- 在sqlserver中如何从字符串中提取数字,英文,中
- MYSQL中常用的强制性操作(例如强制索引)
- sql-server – 如果在插入失败后选择SCOPE_IDENT
- 借助PHP的mysql_query()函数来创建MySQL数据库的
- SQL SERVER SQL入侵恢复xp_cmdshell方法总结