こんにちは、平田です。
MavenでJUnit5テストケースを実行した際に、@DisplayName
アノテーションに指定したタイトルをXMLテストレポートに出してみます。
JUnit5では、@DisplayName
アノテーションでテストメソッド名とは別のテストケース表示名を指定できます。句読点や絵文字などを含む、より自然なテストケース名をつけることができます。
Eclipseなどのテストランナーで実行すると、DisplayNameに指定したタイトルが表示されますが、これをCIサーバ等で実行すると相変わらずメソッド名が表示されます。
Jenkins等のCIサーバでは、XML形式のテストレポート(JUnitのXML形式がデファクトになっており、他の言語のテストフレームワークでも大抵出力できる)を読み込んでテスト結果を表示するため、テストレポートの時点でDisplayNameが出ていないとテスト結果の画面にも出ないことになります。
Mavenを使っている場合は、2019年末にリリースされたmaven-surefire-plugin 3.0.0-M4から、DisplayNameを出力できるようになったようです(プラグインドキュメント参照)。
JUnit5のサンプル集から junit5-jupiter-starter-maven で試してみます。サンプルを git clone して、junit5-jupiter-starter-mavenに対して mvn clean test
します。出力された target/surefire-reports/TEST-com.example.project.CalculatorTests.xml
は以下のようにメソッド名が出力されています。
<testsuite ...>
...
<testcase name="addsTwoNumbers" classname="com.example.project.CalculatorTests" time="0.023"/>
<testcase name="add(int, int, int)[1]" classname="com.example.project.CalculatorTests" time="0.031"/>
<testcase name="add(int, int, int)[2]" classname="com.example.project.CalculatorTests" time="0.001"/>
<testcase name="add(int, int, int)[3]" classname="com.example.project.CalculatorTests" time="0.003"/>
<testcase name="add(int, int, int)[4]" classname="com.example.project.CalculatorTests" time="0.005"/>
</testsuite>
次に、pom.xml
を以下のように修正します。
<build>
<plugins>
...
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<statelessTestsetReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
<usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
</statelessTestsetReporter>
</configuration>
</plugin>
</plugins>
</build>
再度、mvn clean test
して出力されたレポートが以下です。
<testsuite ...>
...
<testcase name="1 + 1 = 2" classname="com.example.project.CalculatorTests" time="0.025"/>
<testcase name="0 + 1 = 1" classname="com.example.project.CalculatorTests" time="0.018"/>
<testcase name="1 + 2 = 3" classname="com.example.project.CalculatorTests" time="0.001"/>
<testcase name="49 + 51 = 100" classname="com.example.project.CalculatorTests" time="0"/>
<testcase name="1 + 100 = 101" classname="com.example.project.CalculatorTests" time="0.001"/>
</testsuite>
DisplayNameに指定したテストケース表示名(1 + 1 = 2 など)が出力されました。これを元にしたテスト結果画面も、テストケース表示名が出力されます。