是否可以在 Sonar 中检查 *Test.java 源代码的质量,例如方法最大大小为 100 行?
问题是,Java Junit 测试随着生产代码的增加而增加,复杂性也随之增加。
我们有超过 1000 行和 2 个方法的单元测试类。
我们想在 Sonar 中检查这些 *Test.java 类的一些规则。
是否可以在 Sonar 中检查 *Test.java 源代码的质量,例如方法最大大小为 100 行?
问题是,Java Junit 测试随着生产代码的增加而增加,复杂性也随之增加。
我们有超过 1000 行和 2 个方法的单元测试类。
我们想在 Sonar 中检查这些 *Test.java 类的一些规则。
从 Sonar 3.1 开始,它包含一个插件,该插件具有针对单元测试执行的特定 PMD 规则(为此创建了 JIRA)。您可以在Configuration > Quality Profiles > Coding Rules
.
但是,您似乎希望像对生产源代码一样对测试源代码进行全面分析,并获得额外的指标(例如 a和 a )。我不认为 Sonar 本身就提供了这样的功能。您可以做的是运行 2 Sonar 分析:% rules compliance
% rules compliance for unit tests
src/test/java
作为“生产”源代码。因此,第二次分析将为您提供代码的质量。对于此分析,您可以指定将更改项目信息的特定 Maven 配置文件(或替代配置文件pom.xml
)(例如,它将指示这src/test/java
是默认配置文件sourceDirectory
)。我还注意到 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-runner
使用sonar.sources=src
声纳运行时也会为src/test/java
.
对测试代码使用特定质量规则集的一种方法是运行两种分析:一种用于主代码,另一种用于测试代码。
这可以实现如下:
声纳-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
已弃用。
这也应该适用于通过 maven 或 jenkins 进行的分析。