持续集成 - 仅进行单元测试?或者单元测试和集成测试?

时间:2014-10-15 17:04:18

标签: unit-testing continuous-integration

在我们进入CI时进行内部辩论。

一方认为只有单元测试应该包含在CI服务器上,而另一方则认为单元测试和集成测试都应该在服务器上运行。

为了清楚起见:我认为单元测试是没有外部/第三方系统依赖性的测试(即数据库,文件系统,Web服务等)和集成测试。

感谢您的指导。如果你能提供参与你方的参考,那将不胜感激。

谢谢, NB

1 个答案:

答案 0 :(得分:1)

一般的想法肯定是不应该包括集成测试。

但是,这是一般规则,在您的情况下可能不是这样。如果您的集成测试足够稳定,经常运行它们的好处会影响必须维护它们的缺点,那么您应该包含它们。

我认为集成测试是依赖于构建输出中未包含的任何内容的测试,这听起来与您的定义基本相同。

它也不是黑白问题。有不同程度的稳定性。例如,按降序排列:

  • 单元测试
  • 集成测试,构建外部数据库,测试,然后销毁数据库
  • 依赖于纯粹用于测试的数据库中的静态数据的集成测试
  • 依赖于用于其他目的的开发数据库的集成测试
  • 依赖第三方Web服务的集成测试

有些人可能会建议,正确使用依赖注入和模拟框架,永远不需要集成测试。我会留下让你的团队进行辩论。

包括测试也会产生不同程度的后果。例如,在测试失败时失败,或者只是发送通知和/或需要某种批准点。

这是一种可能的方法:

  • 包括所有单元测试
  • 决定哪些集成测试有利于包括(低维护和在您的控制范围内)
  • 有一种方法可以快速从构建定义中删除集成测试,以防出现导致测试失败的错误,但是您不希望导致构建失败(dev db for down for例)
    • 您可以通过拥有可以在
    • 之间切换的多个构建定义来实现此目的
  • 决定失败测试的适当行动(构建失败,通知,公司范围内的电子邮件,带戴着戴帽子等的开发者照片等。)
希望有所帮助!