Arquillian と jacoco を使って Java EE アプリケーションの単体テストカバレッジを出力しました。
GitHub にソースを置きました
#環境
- Eclipse(Mars)
- WildFly 8.2.1.Final
- PostgreSQL
PostgreSQL は無くても大丈夫です。
#プロジェクト作成
Maven プロジェクトを新規作成して"org.wildfly.archtype", "wildfly-javaee7-webapp-archetype" を選択しました。
サンプルのソースコードが生成されるので、少々手を加えて使いました。
- WildFly のディレクトリを src/test/resources/arquillian.xml の jbossHome に記載してください。
- PostgreSQL を使わない場合は src/test/resources/test-h2-ds.xmlをテストクラス(MemberRegistrationTest.createTestArchive)で使ってください。
- PostgreSQL を使う場合は test データベースを作成しておいてください。
Jacoco については、山pさんのページを参考にしました。
旧山pの楽しいお勉強生活 2014-07-27
最初、上記で紹介されている POM の記述をペーストして使ったのですが、target/site ディレクトリがうまく生成されませんでした。調べたところ、Arquillian extension jacoco に行き着き、最初に追記したものを消してから POM に追記しました。
注意点としては
- POM の profile (jacoco) の部分で "wildfly-arquillian-container-remote" を追加しました。
- Maven 実行時に jacoco:report オプションが必要でした。
1 については、実際の開発時にテストサーバ上で WildFly を起動したままにしてテストできるかな?と思っています。
2 については、Arquillian extension jacoco の Readme の下の方にあるコマンドを実行するだけだと site ディレクトリが生成されませんでした。
#カバレッジの結果
生成された target/site ディレクトリ配下の index.html を開くとテストのコードカバレッジが見れます。
setId はDBが自動採番なのでテストから外しています。さらにリンクをたどるとソースコードでテストされているか否かが色付けで見られます。
色分けについては、tsubu-mustardさんの記事 WildFly+jacocoでintegration-testのカバレッジ取得 の最後で触れられています。
緑:実行された命令。
赤:実行されなかった命令。
黄:分岐において一部のみ実行された命令。
です。
今度は REST のテストをしてみようと思います。