ソナーで*Test.javaソースコードの品質をチェックインすることは可能ですか?たとえば、メソッドの最大サイズは100行ですか?
問題は、Java Junitテストが生産的なコードとともに成長していることであり、複雑さも増しています。
1000行以上と2つのメソッドを持つ単体テストクラスがあります。
これらの*Test.javaクラスのいくつかのルールをSonarにチェックインしたいと思います。
ソナーで*Test.javaソースコードの品質をチェックインすることは可能ですか?たとえば、メソッドの最大サイズは100行ですか?
問題は、Java Junitテストが生産的なコードとともに成長していることであり、複雑さも増しています。
1000行以上と2つのメソッドを持つ単体テストクラスがあります。
これらの*Test.javaクラスのいくつかのルールをSonarにチェックインしたいと思います。
Sonar 3.1以降、単体テストに対して実行される特定のPMDルールを持つプラグインが含まれています(そのためにJIRAが作成されました)。あなたはそれらをで見ることができますConfiguration > Quality Profiles > Coding Rules
。
ただし、本番ソースコードで行うのと同じように、テストソースコードで完全な分析を実行し、追加のメトリック(たとえば、aおよびa )を取得したいようです。Sonarがそのような機能をネイティブに提供しているとは思いません。あなたができることは2ソナー分析を実行することです:% rules compliance
% rules compliance for unit tests
src/test/java
、を「本番」のソースコードと見なします。したがって、この2番目の分析により、コードの品質がわかります。pom.xml
この分析では、プロジェクト情報を変更する特定のMavenプロファイル(または代替)を指定できます(たとえば、それが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
テストコードに特定の品質ルールセットを使用する1つのアプローチは、2つの分析を実行することです。1つはメインコード用で、もう1つはテストコード用です。
これは次のように実現できます。
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を介した分析でも機能するはずです。