社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

JGiven のレポート機能を試す(Java, JUnit)

JGiven ではいくつかのレポート機能が用意されているようです。

テキストのレポートを無効にする

デフォルトでは、コンソール上にテキストのレポートが表示されます。

 Something should happen

   Given サーバーが止まっている時に
    When プログラムを実行すると
    Then エラーになる

しかしながら、これを Java system property にて無効化することが出来ます。

$ mvn test -Djgiven.report.text=false

わざわざ無効化する用途は思い当たらないのですが。

JSON のレポートを無効にする

デフォルトでは、jgiven-reports ディレクトリ以下に JSON ファイルでテスト結果のレポートが出力されます。
私の環境では、eclipse 上からテストを実行した場合、project/jgiven-reports にレポートが出力されました。
mvn test でテストを実行した場合、target/jgiven-reports/json にレポートが出力されました。
後者については、Maven surefire plugin を用いた場合の挙動になるようですが、あまり理解できていません。
しかしながら、これも無効にすることが出来ます。

$ mvn test -Djgiven.report.enabled=false

この property を指定した場合、コンソール上へのテキスト形式のレポートも表示されなくなります。
※レポート機能自体が無効化される
これも、わざわざ無効化する用途は思い当たらないのですが。

JSON のレポート出力先を変更する

/tmp に変更しています。json のテキストファイルが直接出力されます。

$ mvn test -Djgiven.report.dir=/tmp

HTML のレポートを出力するために

このような感じのレポートが出力できるようです。
まず、JSON のレポート出力は必須とのこと。
そして、Given report generator と呼ばれるツールを html フォーマットを指定して実行すれば出力してくれるようです。
このツールは、jgiven-html5-report と呼ばれるモジュールの一部らしいです。

java com.tngtech.jgiven.report.ReportGenerator \
  --format=html \
  [--sourceDir=<jsonreports>] \
  [--targetDir=<targetDir>] \

maven プラグインを使えば、このようなコマンドを別途実行してあげる必要もなさそうです。
pom ファイルで指定するためには、

<build>
  <plugins>
    <plugin>
      <groupId>com.tngtech.jgiven</groupId>
      <artifactId>jgiven-maven-plugin</artifactId>
      <version>0.17.0</version>
      <executions>
        <execution>
          <goals>
            <goal>report</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <format>html</format>
      </configuration>
    </plugin>
 </plugins>
</build>

注意点は、reporting の配下ではなくて、build の配下に設置すること。

そして、mvn verify コマンドを実行しますと、以下のようにレポートが target/jgiven-reports/html 配下に自動的に生成されます。

[INFO] --- jgiven-maven-plugin:0.17.0:report (default) @ practiceJava ---
[INFO] JGiven HTML report source directory: /home/xx/workspace/Java/target/jgiven-reports/json
[INFO] JGiven HTML report output directory: /home/xx/workspace/Java/target/jgiven-reports/html
[INFO] Generating HTML reports to /home/xx/workspace/Java/target/jgiven-reports/html...
[INFO] Generating HTML5 report to /home/xx/workspace/Java/target/jgiven-reports/html/index.html
[INFO] Written 1 scenarios to data0.js
[INFO] Cannot read /home/xx/workspace/Java/src/test/resources/jgiven/custom.css, skipping
[INFO] Cannot read /home/xx/workspace/Java/src/test/resources/jgiven/custom.js, skipping
[INFO] -------------------------------------------------------------------
[INFO] Generated JGiven HTML reports to directory /home/xx/workspace/Java/target/jgiven-reports/html
[INFO] -------------------------------------------------------------------

ブラウザで開いてみると、こんな感じに見れます。

f:id:blueskyarea:20181128233126p:plain
sample_jgiven_report

まとめ

レポート機能は HTML (ブラウザで確認)のためにあるような印象です。
今までテスト結果をコンソール上や、IDE上でのみか確認出来なかった場合、外部向けに説明するには何らかの加工をしてあげる必要がありましたが、ブラウザ上でのレポートであれば見やすく、外部向けにも説明がしやすくなると思います。
ついでに、テストを書くのが楽しくなれば良いと思います。