静的解析(Checkstyle,SpotBugs)を行うサンプルです。このサンプルを用いて後にJenkins連携確認を行っています。
Eclipseのプロジェクト構成
以下のような構成でMavenプロジェクトを作成しています。
pom.xml
使用しているpom.xmlは、こちらの記事のものとなります。
ソースコード
StyleNg.java
package com.itbibo.example.checkstyle;
import org.apache.commons.lang3.StringUtils;
public class StyleNg {
/**
* helloStyle.
* @param args value
*/
public int helloStyle(String[] args) {
String message = "Hello %replace%!";
String target;
int ret = 0;
if (args.length > 0) {
target = args[0];
} else {
target= "Commons";
ret = 1;
}
System.out.println(StringUtils.replace(message, "%replace%", target));
return ret;
}
}
SpotBugsCode.java
package com.itbibo.example.spotbugs;
public class SpotBugsCode {
// Unused field SpotBugs
private int abc;
private String ip = "127.0.0.1";
/**
* spotBugsTest.
*
*/
public void unusedTest() {
String[]field = {"a", "b", "c", "s", "e"};
//concatenates strings
String s = "";
for (int i = 0; i < field.length; ++i) {
s = s.concat(field[i]);
}
System.out.println(ip);
}
}
JUnit用テストコード
無くても確認できます。JUnit、カバレージに対応する場合に使用します。
StyleNgTest.java
package com.itbibo.example.checkstyle;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
public class StyleNgTest {
@Test
public void test1() {
StyleNg sty = new StyleNg();
String[] ag= {"Style"};
assertThat(sty.helloStyle(ag)).isEqualTo(0);
}
@Test
public void test2() {
StyleNg sty = new StyleNg();
String[] ag= {};
assertThat(sty.helloStyle(ag)).isEqualTo(1);
}
}
SpotBugsCodeTest.java
package com.itbibo.example.spotbugs;
import org.junit.jupiter.api.Test;
public class SpotBugsCodeTest {
@Test
public void nullTest1() {
SpotBugsCode hoge = new SpotBugsCode();
hoge.unusedTest();
}
}
Checkstyle
CheckstyleをMavenで
Maven installが手軽ですが、JUnitのTEST NGがあると実行されません。
ここでは「-Dmaven.test.failure.ignore=true」のオプションを付けて実行してみました。
実行結果は以下のような感じです。
SpotBugs
デフォルトで警告が出ているので。。。
※「private int abc;」のところです。
バグを検索しても表示されず。。。
カーソルを当ててみました。
ここはあまり重要視していないので、飛ばします。。。(Jenkins連携の題材なので)
SpotBugsをMavenで
「CheckstyleをMavenで」を参照してください。以下のようなログが出力されているかと思います。
Jenkinsジョブの設定
Jenkinsジョブの設定については、こちらの記事を参照してください。