単体試験項目表をJUnitで作りたいと思いました。
従来でもAntを使用してJunitReportから試験結果一覧を出すことは可能です。
しかし、この
JUnitReportによるJUnitの結果一覧はこんな感じ
になります(あるいはこんな感じです)。
よく見ましょう。どこにもJavaDocのコメントがないのです。
こんなんで単体(テスト)試験項目のレビューができるか馬鹿やろう (ほらそこ! 直接テストコードみりゃいいじゃねぇかとか言わない)
ということで、
JUnitReportによるJUnitの結果一覧
にJavadocのコメントをdocletを使って追加するものを作ってみました。
これでようやくレビューができます。
これによって出てくる
単体試験項目表はこんな感じです。コメントが付いていることが確認できますね?
もっと表一体化している方が良いのであれば
単体試験項目表はこんな感じにでも出力します。
こちらは画面を目いっぱい広げてからコピーし、excelに張り付けるような用途を想定して作成しています。
さぁ、頑張ってレビューをしましょう。
※ ってなんでこの程度のものがネットで探して出てこないんだ……
※ ちなみに、HTMLがフレームじゃないのは印刷できるようにするためです。
※ 試験項目表って印刷しないとフレームじゃなくてクレームが来るんだよね。
※ なお、気に入らなければソースも置くんで適当に書き換えてください
まずは適当にTestCaseを書いてください。
テストケース上のJavaDocが今回JUnitレポート出力相当に付きます。
/**
* Hello world test message
*/
@Test
public void testHello() {
assertTrue(true);
}
こんな感じでまずJUnitを実行してTEST-*.xmlを出力してください。
<path id="common.classpath">
<pathelement path="C:\eclipse\plugins\org.hamcrest.core_1.3.0.v201303031735.jar" />
<pathelement path="C:\eclipse\plugins\org.junit_4.12.0.v201504281640/junit.jar" />
<pathelement path="C:\Program Files\Java\jdk1.8.0_77\lib\tools.jar" />
<pathelement location="./classes" />
</path>
<target name="all">
<mkdir dir="./target/" />
<delete dir="./target/junit" />
<mkdir dir="./target/junit" />
<junit printsummary="yes" haltonfailure="no">
<classpath refid="common.classpath" />
<formatter type="xml" />
<batchtest fork="yes" todir="./target/junit">
<fileset dir="./src/test/java">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
次に、JavaDocを使って単体試験項目表を作成します。
※当然ですが、これを使うにはこのページからダウンロードしたUT5DocLet.jarが必要です
<delete dir="./target/ut5" />
<mkdir dir="./target/ut5" />
<javadoc destdir="./target/ut5"
encoding="UTF-8" docencoding="UTF-8"
additionalparam="-J-Dfile.encoding=UTF-8"
charset="Shift_JIS">
<classpath refid="common.classpath" />
<packageset dir="src/test/java">
<include name="jp/**" />
</packageset>
<doclet name="jp.ruru.park.ando.ut5.UT5Doclet" path="lib/UT5DocLet.jar">
<param name="-junit" value="./target/junit" />
</doclet>
</javadoc>
また、以下のように-junittreeオプションを付けると、
ツリーの一覧を並び替えることができます。
並び替えたサンプルはこちらになります。
<delete dir="./target/ut5" />
<mkdir dir="./target/ut5" />
<javadoc destdir="./target/ut5"
encoding="UTF-8" docencoding="UTF-8"
additionalparam="-J-Dfile.encoding=UTF-8"
charset="Shift_JIS">
<classpath refid="common.classpath" />
<packageset dir="src/test/java">
<include name="jp/**" />
</packageset>
<doclet name="jp.ruru.park.ando.ut5.UT5Doclet" path="lib/UT5DocLet.jar">
<param name="-junit" value="./target/junit" />
<param name="-junittree" value="abdegh cf r i j tt s nqq l" />
</doclet>
</javadoc>
-junittreeオプションの値は以下の意味を持ちます。
| キー | 意味 |
|---|---|
| a | パッケージ番号 |
| b | パッケージ名 |
| c | パッケージメッセージ |
| d | クラス番号 |
| e | クラス名 |
| f | クラスメッセージ |
| g | テストケース番号 |
| h | テストケース名 |
| i | テストメッセージ |
| j | Status |
| k | TimeStamp |
| l | Time |
| m | Author (JavaDocの@author) |
| n | Version (JavaDocの@version) |
| o | ブランク(パッケージ) |
| p | ブランク(クラス) |
| q | ブランク(テストケース) |
| r | 前提条件 |
| s | Authorから@以降を除いたもの |
| t | 最古のTimeStamp |
| u | 最古のTimeStampから時刻を除いたもの |
| v | TimeStampから時刻を除いたもの |
| w | Pass the test code. |
| [space] | 無視 |
テスト項目表では開始日と終了日を入れたくなることがあります。
そのような場合は、レポートを日毎単位でフォルダを分けて記載して読み込ませると良いでしょう。
以下は、日付毎に tstamp anttask を使用して日付毎にレポートを出す例です。
<tstamp>
<format property="DATE" pattern="yyyy-MM-dd" />
</tstamp>
<delete dir="./target/junitDate/${DATE}" />
<mkdir dir="./target/junitDate/${DATE}" />
<junit printsummary="yes" haltonfailure="no">
<classpath refid="common.classpath" />
<formatter type="xml" />
<batchtest fork="yes" todir="./target/junitDate/${DATE}">
<fileset dir="./src/test/java">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
こちら、もう少し複雑書いた例になります。
-junit フォルダは再帰的に見るので./target/junitDate/を見るようにしています。
<javadoc destdir="./src/site"
windowtitle="(SAMPLE)DOCLET: JUnit report include JavaDoc"
encoding="MS932"
docencoding="UTF-8"
additionalparam="-J-Dfile.encoding=MS932"
locale="en"
use="true"
defaultexcludes="no"
access="private"
nodeprecated="true"
nodeprecatedlist="true"
notree="false"
noindex="false"
nonavbar="true"
nohelp="true"
serialwarn="true"
failonerror="false"
splitindex="true"
charset="Shift_JIS"
source="1.8"
stylesheetfile="./target/site/css/maven-theme.css">
<classpath refid="common.classpath" />
<packageset dir="src/test/java" defaultexcludes="yes">
<include name="jp/**" />
</packageset>
<group title="Main TestCase" packages="jp.ruru.park.ando.ut5*"/>
<group title="Findbugs Test" packages="findbugs*"/>
<doclet name="jp.ruru.park.ando.ut5.UT5Doclet"
path="lib/UT5DocLet.jar">
<param name="-junit" value="./target/junitDate" />
<param name="-junittree" value="abdegh cf r i wj vt s nqq l" />
</doclet>
<doctitle>DOCLET: JUnit report include JavaDoc.</doctitle>
<footer>Copyright © 2016 Ando Computer Behavior RandD. All Rights Reserved.</footer>
<link href="http://docs.oracle.com/javase/8/docs/api/" />
</javadoc>