【发布时间】:2012-12-31 20:27:04
【问题描述】:
是否可以在 Sonar 中检查 *Test.java 源代码的质量,例如方法最大大小100行?
问题是,Java Junit 测试随着生产代码的增加而增加,复杂性也随之增加。
我们有超过 1000 行和 2 个方法的单元测试类。
我们想在 Sonar 中检查这些 *Test.java 类的一些规则。
【问题讨论】:
标签: java unit-testing sonarqube rules
是否可以在 Sonar 中检查 *Test.java 源代码的质量,例如方法最大大小100行?
问题是,Java Junit 测试随着生产代码的增加而增加,复杂性也随之增加。
我们有超过 1000 行和 2 个方法的单元测试类。
我们想在 Sonar 中检查这些 *Test.java 类的一些规则。
【问题讨论】:
标签: java unit-testing sonarqube rules
我还注意到 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 的附加项目,该项目仅包含对测试类的分析。
【讨论】:
使用 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 进行的分析。
【讨论】:
-D)
从 Sonar 3.1 开始,它包含一个插件,该插件具有针对单元测试执行的特定 PMD 规则 (a JIRA was created for that)。您可以在Configuration > Quality Profiles > Coding Rules 中看到它们。
但是,您似乎想对 test 源代码进行全面分析,就像对 production 源代码所做的那样,并获得额外的指标(例如例如 % rules compliance 和 % rules compliance for unit tests)。我不认为 Sonar 本身就提供了这样的功能。你可以做的是运行2声纳分析:
src/test/java 视为“生产”源代码。因此,第二次分析将为您提供代码质量。对于此分析,您可以指定一个特定的 Maven 配置文件(或替代的 pom.xml)来更改项目信息(例如,它将表明 src/test/java 是默认的 sourceDirectory)。【讨论】: