我们的团队进行了数百次集成测试,可以测试数据库并验证结果。对于所有的集成测试,我都有两个基类,一个用于只检索测试,一个用于创建/更新/删除测试。仅检索基类在TestFixtureSetup期间重新生成数据库,因此每个测试类仅执行一次。 CUD基类在每次测试之前都会重新生成数据库。每个存储库类都有自己的对应测试类。
您可以想象,整个过程需要花费一些时间(运行大约7-8分钟并迅速增长)。将其作为CI(CruiseControl.Net)的一部分运行不是问题,但是在本地运行会花费很长时间,并且实际上在提交代码之前禁止运行它们。
我的问题是,有没有最佳实践来帮助加快这些类型的集成测试的执行速度?
我无法在内存中执行它们(la sqlite),因为我们使用了sqlite不支持的某些特定于数据库的功能(计算列等)。
另外,整个团队必须能够执行它们,因此,在SQL Server Express的本地实例上运行它们,否则可能容易出错,除非这些实例的连接字符串完全相同。
您如何在商店中做到这一点,什么运作良好?
谢谢!
最佳答案
将快速(单元)测试和慢速(集成)测试分开,以便可以分别运行它们。使用测试框架提供的任何方法对测试进行分组/分类。如果测试框架不支持对测试进行分组,请将集成测试移至仅包含集成测试的单独模块中。
快速测试只需要几秒钟即可运行所有测试,并且代码覆盖率应很高。这些测试使开发人员可以进行无情的重构,因为他们可以进行少量更改并运行所有测试,并且非常有信心更改不会破坏任何内容。
缓慢的测试可能需要花费几分钟才能运行,并且它们将确保各个组件正常工作。当开发人员进行可能会破坏某些由集成测试而非单元测试测试的更改时,他们应在提交之前运行那些集成测试。否则,慢速测试将由CI服务器运行。
关于integration-testing - 集成测试最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1328730/