是否可以在Sonar中检查*Test.java源代码的质量,例如方法的最大大小为100行?
问题是,Java Junit测试随着生产代码的增长而增长,也随着复杂性的增加而增长。
我们有超过1000行和2个方法的单元测试类。
我们想在Sonar中为这些*Test.java类检查一些规则
我还注意到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>
使用
运行Mavenmvn sonar:sonar -Panalyze-test-classes
然后,将激活此配置文件,并在SonarQube中创建一个附加的项目,其后缀为-tests,该项目仅包含对测试类的分析。
自从Sonar 3.1以来,它包含了一个插件,该插件具有针对单元测试执行的特定PMD规则(为此创建了JIRA)。你可以在Configuration > Quality Profiles > Coding Rules
中看到它们。
% rules compliance
和% rules compliance for unit tests
)。我不认为Sonar本身提供了这样的功能。你能做的是运行2声呐分析:
- 你的第一个分析是当前的; 第二个分析将考虑
src/test/java
作为"生产"源代码。因此,第二次分析将为您提供代码的质量。对于这个分析,您可以指定一个特定的Maven配置文件(或者一个可选的pom.xml
),它将改变项目信息(例如,它将表明src/test/java
是默认的sourceDirectory
)。使用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.profile
已被弃用。
这也可以通过maven或jenkins进行分析。