Maven 和代码度量:检查每个类是否存在测试用例



Maven中可以使用某些东西来自动执行这种检查吗?我看到检查样式和 PMD,但我找不到此功能。

基本上,如果有一个类A并且没有ATestCase,我希望构建失败。我知道,这不是一个严格的检查,可以通过创建类来轻松绕过,但目前这就足够了。

你在寻找什么

正如Jens Piegsa指出的那样,您正在寻找的是一个显示测试覆盖率的工具,换句话说,测试使用的代码百分比。

它允许你查看你的代码被测试了多少,以一种真正比(至少按类测试)更可靠的方式。

你可以使用Cobertura,它很好地集成在Maven:http://mojo.codehaus.org/cobertura-maven-plugin/

实现这一目标的方法

聚甲醛配置

只需将此代码片段放在您的pom中即可.xml

<project>
  ...  
  <reporting>
    <plugins>
      ...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.6</version>
      </plugin>
    </plugins>
  </reporting>
</project>

跑步覆盖率

并运行

 mvn cobertura:cobertura

或运行报告阶段(与站点生成绑定)

 mvn site:site

添加质量阈值

如果要使低覆盖率构建无效,甚至可以添加失败阈值

    <plugin>
         [...]
         <configuration>
            <check>
                <!-- Fail if code coverage does not respects the goals  -->
                <haltOnFailure>true</haltOnFailure>
                <!-- Per-class thresholds -->
                <lineRate>80</lineRate>
                <!-- Per-branch thresholds (in a if verify that if and else are covered-->
                <branchRate>80</branchRate>
                <!-- Project-wide thresholds -->
                <totalLineRate>90</totalLineRate>
                <totalBranchRate>90</totalBranchRate>
            </check>
        </configuration>
    </plugin>

简短回答:不。

更长的答案:我曾经写过一个单元测试来断言所有 VO 都有一个 no-args 构造函数,我认为你可以在这里使用相同的方法。

基本上,遍历Package.getPackages()(您需要过滤掉 JRE 包,但假设您使用的是合理的命名空间,这应该没有问题)。对于每个包,收集所有不以 Test 开头或结尾的类,并断言每个类都有一个匹配的测试。

它不是万无一失的,但也许足够接近?

干杯

最新更新