Chr*_*way 20 integration-testing
我们的团队有数百个集成测试,可以访问数据库并验证结果.我有两个基类用于所有集成测试,一个用于仅检索测试,一个用于创建/更新/删除测试.仅检索基类在TestFixtureSetup期间重新生成数据库,因此每个测试类只执行一次.CUD基类在每次测试之前重新生成数据库.每个存储库类都有自己的相应测试类.
可以想象,整个过程需要相当长的时间(接近7-8分钟才能运行并快速增长).将此运行作为我们的CI(CruiseControl.Net)的一部分运行不是问题,但在本地运行需要很长时间,并且在提交代码之前确实禁止运行它们.
我的问题是,是否有任何最佳实践可以帮助加快这些类型的集成测试的执行速度?
我无法在内存中执行它们(la sqlite),因为我们使用sqlite不支持的某些特定于数据库的功能(计算列等).
此外,整个团队必须能够执行它们,因此在SQL Server Express的本地实例上运行它们可能容易出错,除非这些实例的连接字符串完全相同.
你是如何在你的店里完成这项工作的,哪些方面有效?
谢谢!
Esk*_*ola 15
将快速(单位)和慢速(积分)测试分开,以便您可以单独运行它们.使用测试框架提供的任何分组/分类测试方法.如果测试框架不支持对测试进行分组,请将集成测试移动到仅具有集成测试的单独模块中.
快速测试应该只需要几秒钟来运行所有这些测试,并且应该具有高代码覆盖率.这些测试允许开发人员无情地重构,因为他们可以进行一些小的更改并运行所有测试,并且非常确信更改不会破坏任何内容.
慢速测试可能需要几分钟才能运行,它们将确保各个组件正确地协同工作.当开发人员进行的更改可能会破坏集成测试而不是单元测试所测试的内容时,他们应该在提交之前运行这些集成测试.否则,慢速测试由CI服务器运行.
gre*_*ade 11
在NUnit中,您可以使用属性来装饰您的测试类(或方法),例如:
[Category("Integration")]
public class SomeTestFixture{
...
}
[Category("Unit")]
public class SomeOtherTestFixture{
...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在服务器上的构建过程中规定所有类别都可以运行,并且只需要您的开发人员运行可用测试类别的子集.他们需要运行哪些类别取决于你会比我更了解的事情.但要点是他们能够在单元级别进行测试,服务器可以处理集成测试.
我是一名java开发人员,但处理过类似的问题.我发现运行本地数据库实例的速度很快(没有数据通过网络发送),并且因为这样您就不会在集成测试数据库上发生争用.
我们用于解决此问题的一般方法是设置构建脚本以从配置文件中读取数据库连接字符串,然后为每个环境设置一个文件.例如,一个用于WORKSTATION的文件,另一个用于CI的文件.然后设置构建脚本以根据指定的环境读取配置文件.因此,在使用WORKSTATION配置运行的开发人员工作站上运行的构建,并且在CI环境中运行的构建使用CI设置.
如果可以从单个脚本创建整个数据库模式,那么它也会有很大帮助,因此每个开发人员都可以快速设置本地数据库进行测试.您甚至可以将此概念扩展到下一级并将数据库设置脚本添加到构建过程,因此可以编写整个数据库设置以跟上数据库模式中的更改.
| 归档时间: |
|
| 查看次数: |
11465 次 |
| 最近记录: |