如果上面有一些“死”代码,为什么Cobertura 2.7看不到覆盖线?

时间:2018-08-06 22:48:15

标签: java junit4 maven-cobertura-plugin

花了几天的时间来找出应该被单元测试涵盖但不是的一些代码行(我们自己的Java框架的代码)发生了什么之后,我们开始了一场竞赛,以找出如何重现这种奇怪的Cobertura的行为。而且我们知道了。

注意:我们的合规人员禁止发布我们框架的源代码或此处产生的任何类型的代码(与该问题有关)。仅允许我编写分步指南。

  1. 创建2个方法:

    • 一个methodWithDeadCode()返回的内容;和
    • 一个methodCoveredByUnitTests()也返回了一些内容。

      第一个必须位于第二个之上

  2. methodWithDeadCode()内:

    • 声明变量myVar并将其分配为null;
    • 写一条if-else语句,以验证有关myVar的某些信息(例如myVar != null);
    • 在第一个if内写另一个if-else来验证您想要的任何内容(重要的是,有2条if-else语句已被链接);
    • 然后,退还东西;
  3. methodCoveredByUnitTests()内:
    • 编写一个单元测试以完全测试methodCoveredByUnitTests()(100%);
    • methodCoveredByUnitTests()正文中编写一些声明和赋值,以供单元测试进行测试;

使用cobertura-maven-plugin:2.7,我们发现methodCoveredByUnitTests()由于methodWithDeadCode()内的“死”代码而不会显示为Cobertura覆盖。

但是,如果我们切出methodCoveredByUnitTests()并将其粘贴上方,则methodWithDeadCode() Cobertura会认为它被覆盖了!!

注意:我已经在Cobertura's github page

上发布了一个问题

我认为这是某种错误。但是你们怎么想的,伙计们?

0 个答案:

没有答案