簡體   English   中英

Jacoco顯示錯誤的承保范圍檢查結果

[英]Jacoco Showing Wrong Coverage check Result

我已經通過maven在我的項目中配置了Jacoco插件。

這是我的jacoco配置

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.3</version>
    <configuration>
      <excludes>
      </exclude>**/some/package/SomeClass*</exclude>
      </excludes>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>report</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>report</goal>
        </goals>
      </execution>
      <execution>
        <id>jacoco-check</id>
        <goals>
          <goal>check</goal>
        </goals>
        <configuration>
          <rules>
            <rule>
              <element>CLASS</element>
              <excludes>
                <exclude>*Test</exclude>
              </excludes>
              <limits>
                <limit>
                  <counter>LINE</counter>
                  <value>COVEREDRATIO</value>
                  <minimum>80%</minimum>
                </limit>
              </limits>
            </rule>
          </rules>
        </configuration>
      </execution>
    </executions>
  </plugin>

截圖

我已經執行了Test,並顯示了抽象類的94%的覆蓋率,我使用了它的具體實現對其進行了測試。

當我通過maven build運行時

我收到以下錯誤

類my.package.AbstractParser.1違反了規則:行覆蓋率是0.00,但預期最小值是0.80

我嘗試在Test上使用虛擬實現來測試抽象類,但仍然遇到相同的錯誤

有人可以告訴我我在做什么錯。

編輯:我找出了失敗的原因

我已經寫了一個內聯地圖初始化

return new HashMap<String, String>() {
    {
      put(input, "");
    }
  };

相對於該部分,覆蓋率顯示為0%。 所以我的測試沒有涵蓋這部分。

可是我累了

 final Map<String, String> defaultMap = new HashMap<>();
  defaultMap.put(input, "");
  return defaultMap;

構建過程甚至沒有覆蓋新代碼。 有人可以解釋一下為什么內聯初始化會發生嗎?

您的配置

          <rules>
            <rule>
              <element>CLASS</element>
              <excludes>
                <exclude>*Test</exclude>
              </excludes>
              <limits>
                <limit>
                  <counter>LINE</counter>
                  <value>COVEREDRATIO</value>
                  <minimum>80%</minimum>
                </limit>
              </limits>
            </rule>
          </rules>

表示每個類別的線路覆蓋率至少應為80%。

return new HashMap<String, String>() {
    {
      put(input, "");
    }
  };

聲明匿名類 ,JaCoCo報告中可見什么是BTW-請參見下面的屏幕快照的第一表行

報告

  final Map<String, String> defaultMap = new HashMap<>();
  defaultMap.put(input, "");
  return defaultMap;

不聲明任何類。

嘗試將其添加到您的gradle構建中

android {
    testOptions {
        unitTests {
            all {
                jvmArgs '-noverify'
            }
        }
    }
}

測試和覆蓋率存在問題,因此您需要配置jvmArgs設置以進行覆蓋率檢查,可以在IDE本身中啟用它,但是在CI / maven /中運行覆蓋率時,應在gradle中對其進行配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM