【问题标题】:Sonar Java: check the quality of the test classes source code?Sonar Java:检查测试类源代码的质量?
【发布时间】:2012-12-31 20:27:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java unit-testing sonarqube rules


    【解决方案1】:

    我还注意到 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】:

    使用 SonarQube 4.5.2(不知道他们何时改变了行为)在我看来,单元测试不再被排除在分析之外。当使用sonar.sources=src 运行sonar-runner 时,声纳也会为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.profileis deprecated

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

    【讨论】:

    • 如何在 Jenkins Job 中运行它?您应该运行 2 个作业(一个用于主要分析,一个用于测试)?
    • 我建议只使用一个作业和两个分析,因为它更快且更易于维护。您可以添加另一个构建后步骤(声纳或执行 maven 目标的 shell)并通过上述测试参数(-D
    【解决方案3】:

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

    但是,您似乎想对 test 源代码进行全面分析,就像对 production 源代码所做的那样,并获得额外的指标(例如例如 % rules compliance% rules compliance for unit tests)。我不认为 Sonar 本身就提供了这样的功能。你可以做的是运行2声纳分析:

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

    【讨论】:

    • 谢谢,这就是我需要的,不是完整的分析,而是一些规则:)
    • 在 Sonar >3.4 中,您可以复制自己的规则并改进“PMD 单元测试”插件
    猜你喜欢
    • 2016-03-09
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多