如何将代码覆盖率阈值设置为TeamCity中的高水位线?

时间:2011-04-29 13:55:19

标签: teamcity code-coverage teamcity-5.1

我有一个TeamCity构建,可以捕获单元测试的代码覆盖率。我还为构建成功的最小代码覆盖定义了一个环境变量,该工作正常,但我不想手动维护此阈值。我的问题是,是否存在一种方法(在TeamCity之外的某个地方发布代码覆盖率统计数据,然后从上次成功构建中读取结果),以便在代码覆盖率提高时自动调整阈值,以确保在不允许的情况下实现稳定的改进倒退:)?

例如,假设当前代码覆盖率为20%(遗留应用程序),并且在编写新的单元测试时,代码覆盖率提高到25%。然后,有人检查新代码而不进行单元测试,代码覆盖率降至24%。我希望TeamCity失败,因为代码覆盖率从25%下降到24%。

3 个答案:

答案 0 :(得分:9)

我有一些关于代码覆盖的宠物理论,在我回答这个问题之前,我想先解释一下。

首先是一些背景:

  • Code coverage有很多种,但我只会谈论线覆盖,但你应该可以用其他种类代替。
  • 从问题:“......有人检查新代码而没有单元测试和代码覆盖率下降......”这与相似内容相关:“一些(重构/消除重复/替换算法)并删除测试代码和覆盖率下降。“
  • 应该测量覆盖率是运行一组测试的结果。也就是说,不是通过运行应用程序并从外部激发它。
  • 覆盖百分比是非常误导的 我想到了这一点,你真的只想知道没有涵盖多少行代码 请参阅我对此答案的评论:Ensure minimal coverage on new Subversion commits
  • 覆盖范围应尽可能高。 这个问题谈到“......改善而不允许倒退......”
  • 100% coverage is possible
    我已经完成了,虽然有一个图书馆。

我有一个theory,就代码覆盖而言,您应该将代码划分为两个部分:

  1. 所有代码100%覆盖的部门。
  2. 没有代码的部门。
  3. 任何一个部门都可以由许多项目构成,但是一个部门的成员应该是文件(假设Java和C#都有源文件),最好是整个文件夹。你可以在第一个分区中拥有一组项目,在第二个分区中拥有另一组项目。

    现在报道的覆盖率不足只是第二师的行数。

    操作模式应该是您正在测试代码,代码只是属于100%覆盖范围。但是,如果你发现一些棘手的代码,你的大脑无法找到测试的方法,你应该重构,以便未测试的位进入第二个分区。或者你可以得到一个脑波,并且能够找到一个将第二个分区提高到0%以上的测试,此时你将代码重构到第一个分区。这意味着每次办理登机手续都会保持理论上的不变性。

    现在,回到问题:
    不,除了简要介绍JetBrains网站之外,我根本不了解TeamCity,所以我不知道如何更新覆盖范围,但根据我的理论,它应该是100%或者没有,所以你能为每个项目设定限额吗?如果可以,那么第一个分区的固定限制为100% 如果您可以获得两个分区,您可能希望使用第二个分区的代码度量标准进行自动更新,逐渐降低更好。

答案 1 :(得分:1)

这是一个老问题,但我想提一下,现在可以通过"失败条件"在新版本的TeamCity中实现这一点。特征。失败条件可以使用常量以及与先前生成的度量进行比较。在这种情况下,失败条件如下所示:

enter image description here

答案 2 :(得分:0)

运行测试后,查看覆盖率并将环境变量更新为最近的五个不大于,或许?

如果您的阈值最初为25且覆盖范围跳至31,则将其更新为30,如果阈值低于30,它现在将会中断。当然,当跳转发生时,您可以将其设为31。

因此,在每次测试运行后,您会看到当前的覆盖范围是否大于当前阈值并将阈值设置为新值?