我们有一个相当广泛的测试套件,需要永远执行。每次测试完成后,数据库(MSSQL)都需要清空,以便为下一个测试用例刷新。我们做到这一点的方法是临时删除所有外键,截断所有表,然后重新添加FK。
根据NHProfiler的说法,这一步需要2-3秒。所有的时间似乎都花在了FK操作上。
我们目前的方法显然不是最优的,但是我们应该走哪条路来提高性能呢?与FK移除/添加的操作数量相比,从数据库中实际删除的元素数量完全无关紧要。
不能选择使用内存中的SQLite数据库,因为测试中的代码使用特定于MSSQL的操作。
发布于 2010-11-16 19:02:25
您可以将所有内容包装在一个事务中,最后只需回滚所有内容。我就是这么做的。它还允许并行运行测试。
发布于 2010-11-16 20:50:43
使用SQL Server Compact如何,使用nhibernate schema从映射文件创建数据库,并为每个测试加载数据。如果你谈论的是微不足道的数据量。
看看这篇博文- Using SQL Server Compact Edition for Unit testing
或者,您可以使用Fluent Migrator创建数据库模式并加载每个测试的数据。
发布于 2010-11-16 21:06:23
为什么要在测试中使用DB呢?你当然应该嘲笑持久化机制?除非您真的在尝试测试这部分功能,否则您实际上是在浪费时间和资源来插入/更新/删除数据。
您的测试依赖于ms sql细节和返回的数据这一事实暗示了您的体系结构需要查看的可能性。
我并不想在这里听起来很粗鲁--我只是很惊讶没有其他人在这件事上跟你搭讪。
w://
https://stackoverflow.com/questions/4193420
复制相似问题