首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集成测试最佳实践

集成测试最佳实践
EN

Stack Overflow用户
提问于 2009-08-25 14:38:49
回答 5查看 13.6K关注 0票数 20

我们的团队有数百个访问数据库并验证结果的集成测试。我为所有集成测试提供了两个基类,一个用于仅检索测试,另一个用于创建/更新/删除测试。仅检索基类在TestFixtureSetup期间重新生成数据库,因此它在每个测试类中只执行一次。CUD基类在每次测试之前重新生成数据库。每个存储库类都有自己的相应测试类。

正如你可以想象的那样,整个过程需要相当长的时间(接近7-8分钟才能运行并快速增长)。将此运行作为CI (CruiseControl.Net)的一部分不是问题,但在本地运行需要很长时间,并且在提交代码之前确实禁止运行它们。

我的问题是,是否有任何最佳实践来帮助加速这些类型的集成测试的执行?

我无法在内存中执行它们(就像sqlite一样),因为我们使用了一些特定于数据库的功能(计算列等)。在sqlite中不受支持。

此外,整个团队必须能够执行它们,因此在SQL Server Express的本地实例或其他实例上运行它们可能容易出错,除非这些实例的连接字符串都是相同的。

你是如何在你的商店里做到这一点的,什么工作效果很好?

谢谢!

EN

回答 5

Stack Overflow用户

发布于 2009-08-25 17:48:42

将快速(单元)和慢速(集成)测试分开,以便您可以单独运行它们。使用测试框架提供的任何方法对测试进行分组/分类。如果测试框架不支持对测试进行分组,请将集成测试移动到仅包含集成测试的单独模块中。

快速测试应该只需要几秒钟就可以运行所有这些测试,并且应该具有很高的代码覆盖率。这类测试允许开发人员毫不留情地重构,因为他们可以进行很小的更改并运行所有测试,并且非常有信心更改不会破坏任何东西。

缓慢的测试可能需要几分钟的时间才能运行,它们将确保各个组件能够正确地协同工作。当开发人员所做的更改可能会破坏由集成测试测试而不是单元测试的内容时,他们应该在提交之前运行这些集成测试。否则,CI服务器将运行速度较慢的测试。

票数 16
EN

Stack Overflow用户

发布于 2009-08-25 14:49:55

在NUnit中,你可以用一个属性来修饰你的测试类(或方法),例如:

代码语言:javascript
复制
[Category("Integration")]
public class SomeTestFixture{
    ...
}
[Category("Unit")]
public class SomeOtherTestFixture{
    ...
}

然后,您可以在服务器上的构建过程中规定运行所有类别,并且只要求您的开发人员运行可用测试类别的子集。它们需要运行的类别取决于您将比我更好地理解的内容。但要点是,他们能够在单元级别进行测试,服务器处理集成测试。

票数 11
EN

Stack Overflow用户

发布于 2009-08-25 14:46:30

我是一名java开发人员,但也遇到过类似的问题。我发现运行本地数据库实例效果很好,这是因为运行速度快(不需要通过网络发送数据),而且这种方式不会对集成测试数据库产生争用。

我们解决此问题的一般方法是设置构建脚本,以便从配置文件中读取数据库连接字符串,然后为每个环境设置一个文件。例如,一个文件用于工作站,另一个文件用于配置项。然后,设置构建脚本以根据指定的环境读取配置文件。因此,在开发人员工作站上运行的构建使用工作站配置运行,而在CI环境中运行的构建使用CI设置。

如果整个数据库模式可以从单个脚本创建,那么也会有很大的帮助,这样每个开发人员就可以快速设置一个本地数据库进行测试。您甚至可以将这个概念扩展到下一个级别,并将数据库设置脚本添加到构建过程中,以便可以编写整个数据库设置的脚本,以跟上数据库模式中的更改。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1328730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档