Sonar Java:检查测试类源代码的质量?

时间:2013-01-17 10:14:34

标签: java unit-testing sonarqube rules

是否可以在Sonar中检查* Test.java源代码的质量,例如:方法最大100行?

问题是,Java Junit测试随着生产代码的增长而增长,而且复杂性也在增长。

我们有超过1000行和2种方法的单元测试类。

我们想在Sonar中查看这些* Test.java类的一些规则。

3 个答案:

答案 0 :(得分:5)

从Sonar 3.1开始,它包含一个插件,该插件具有针对单元测试(a JIRA was created for that)执行的特定PMD规则。您可以在Configuration > Quality Profiles > Coding Rules

中查看它们

但是,您似乎希望对 test 源代码运行完整分析,就像在生产源代码上一样,并获得其他指标(对于例如% rules compliance% rules compliance for unit tests)。我不认为Sonar本身提供这样的功能。您可以做的是运行2个声纳分析:

  1. 您的第一个分析是当前的分析;
  2. 第二个分析会将src/test/java视为“生产”源代码。因此,第二次分析将为您提供代码的质量。对于此分析,您可以指定将更改项目信息的特定Maven配置文件(或替代pom.xml)(例如,它将指示src/test/java是默认的sourceDirectory)。

答案 1 :(得分:3)

我还注意到,SonarQube默认会忽略测试资源以进行质量分析。使用schnatterers回答,我找到了一种简单的方法来创建一个单独的项目,只包括测试类作为SonarQube中的源,因此触发了对它们的质量分析。在项目的POM中我想分析我添加一个配置文件,它相应地改变了声纳属性:

    <profiles>
            <profile>
                    <id>analyze-test-classes</id>
                    <properties>
                            <sonar.sources>src/test/java</sonar.sources>
                            <sonar.tests></sonar.tests>
                            <sonar.projectName>${project.name}-tests</sonar.projectName>
                            <sonar.projectKey>${project.groupId}:${project.artifactId}-tests</sonar.projectKey>
                    </properties>
            </profile>
    </profiles>

使用

运行Maven
mvn sonar:sonar -Panalyze-test-classes

然后将激活此配置文件并在SonarQube中创建一个带有后缀-tests的附加项目,该项目仅包含测试类的分析。

答案 2 :(得分:0)

使用SonarQube 4.5.2(不知道他们何时改变了行为)在我看来,单元测试不再排除在分析之外。使用sonar-runner声纳运行sonar.sources=src时,还会为src/test/java创建问题。

对测试代码使用特定质量规则集的一种方法是运行两个分析:一个用于主代码,另一个用于测试代码。
这可以通过以下方式实现:

sonar-project.properties:

sonar.projectName=testSonar
sonar.projectKey=testsonar
sonar.sources=src/main/java
sonar.projectVersion=1.0
  • 分析主要代码:sonar-runner
  • 分析测试代码:sonar-runner -Dsonar.projectKey=testsonar.test -Dsonar.sources=src/test/java -Dsonar.projectName="testSonar TEST"

必须通过服务器(仪表板|项目配置|质量配置文件)更改不同的质量配置文件,因为-Dsonar.profile is deprecated

这也适用于通过maven或jenkins进行分析。