過去に実践していたJunit5のテストクラスの書き方を備忘録として書き起こします。
皆さんの参考になれば幸いです。
テストクラス置き場
テストクラスは、プロダクトのクラスとフォルダを分けて置きましょう。
Gradleを使用する場合、src/test/javaが標準フォルダです。
パッケージ名
テストクラスのパッケージ名は、プロダクトのクラスと同じ名称は避けましょう。
しかし、テストクラスとの紐付けは絶対にしたいところです。
なので、「test + テスト対象のパッケージ名」という形が頭使わずにすむかなと思います。
パッケージ名を別にしている理由は、Springを使用した場合、
テストクラスでのDI重複とか対策です。(確か)
同じパッケージ名だと、testフォルダをDIしてテストしたいクラスのDIができなかったので、
パッケージ名の頭から区別できるようにしています。
クラス名
これも頭使わずに、「テスト対象のクラス名 + Test」にしましょう。
同じクラス名だと補完の時にめんどくさいです。
テスト書き方
テスト対象クラス
public class Greeting {
public String hello() {
return "Hello";
}
public String helloWorld() {
return "Hello World";
}
}
テストクラス
class GreetingTest {
@Nested
@DisplayName("method : hello")
public class Hello {
private Greeting test = new Greeting();
@Test
@DisplayName("正常に動作するテストケース")
public void case1() {
Assertions.assertEquals("Hello", test.hello());
}
}
@Nested
@DisplayName("method : helloWorld")
public class HelloWold {
private Greeting test = new Greeting();
@Test
@DisplayName("正常に動作するテストケース")
public void case1() {
Assertions.assertEquals("Hello World", test.helloWorld());
}
}
}
クラス修飾子
何もつけないのが無難です。
publicとかつけてしまうと補完で表示されてしまうので、見にくいです。
メソッドごとにクラスを分ける
テストクラスでは見やすいように、メソッドごとにテストクラスを分けています。
テストケースを追加する時に、この形がテストケースを追加しやすいです。
インナークラスの名前は、メソッド名がわかりやすいです。
DisplayNameでしっかりテストケースをかく
経験上、テストケースのメソッド名を長くなったりするか、適当になったりして
ひどく読みにくくなります。
そのため、長ったらしいメソッド名をつけるぐらいなら、DisplayNameを使ってしっかりと
テスト内容を書きましょう。
Eclipseのテスト結果確認サンプル
Displayをかくと、カバレッジの画面に反映されるので、よりわかりやすくなります。
まとめ
テストクラスは、内容も大事ですけど、同じぐらい整理して書くことも大事です。
形式立てて書くことで、開発の時だけでなく、保守の時も変更しやすいテストクラスを書いて行きましょう。