概要
JUnit5でテストコードを書く基本について学ぶ。
テストの命名規則
テストクラス、テストメソッドの記述には一般的な慣例があります。
ここではそれらを紹介しますが、実際にはプロジェクト内でのコーディング規約やルールに従うようにして下さい。
クラス名
テストのクラス名は、テスト対象のクラス名に「Test」を付加した名称にする慣習があります。
(例)
テスト対象クラス | Calculation.java |
テストクラス | CalculationTest.java |
メソッド名
テストするメソッドの頭に「test」を付加する慣習があります。
また、テストするケースによって名称を具体的に示します。
メソッド名は日本語で記述することもできます。
(例)
テスト対象メソッド | add(x, y) |
テストメソッド | testAdd() |
testAdd_NegativeNumbers() | |
小数同士を加算する() |
基本的な構成
テストコードは次の4つで構成されています。
事前準備(setup)
テストを実行可能な状態にするステップです。
特に行うことがなければ省略可能です。
実行(execute)
テストしたいメソッドを実行させます。
実行結果は「actual(実際の値)」という変数で保持することが慣習になっています。
検証(assert)
期待値(expected)と実行結果(actual)を検証するステップです。
大抵の場合、両方が一致することを検証します。
事後処理(tearDown)
後処理のステップです。
テストした後、余計なごみデータを削除したりします。
特に行うことがなければ省略可能です。
テストコードの例
基本的な構成をベースにテストクラスを作成しました。
HelloWorldクラスのsayメソッドの戻り値が、”Hello World!”であることを検証しています。
テスト対象クラス
1 2 3 4 5 |
public class HelloWorld { public String say() { return "Hello World!"; } } |
テストクラス
・テストメソッドには「@Test」というアノテーションを付与します。
・テストの評価にはassertXXXメソッドを使用します。
ここではassertEqualsという、2つの値が等価であることを検証するメソッドを使用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class HelloWorldTest { @Test void testHelloWorld(){ // setUp HelloWorld helloWorld = new HelloWorld(); // execute String actual = helloWorld.say(); // assert assertEquals("Hello World!", actual); // tearDown helloWorld = null; } } |
(補足)tearDownでインスタンスにnullを代入していますがこれは冗長なコードです。
テストコードの4つの構成全てを記述する例としたためにあえてそのようにしています。
まとめ
- クラス名は最後に「Test」を付けるのが慣例である。
- メソッド名は最初に「test」を付けるのが慣例である。
また、日本語にすることもできる。 - テストコードは、事前準備・実行・検証・事後処理 の4つで構成されている。
- テストしたいメソッドには@Testをつけること。
- テストの評価にはassertXXXメソッドを使用する。
コメント