slim3のテストコードの注意点
slim3 でプログラムを生成すると、自動的にテストコードも作成してくれます。
ただ、テストコードは jUnit 4.7 を使用しているため、3.x 系とは色々と違うところがあります。
(私は知らなかったのでハマりました…)
今回は、jUnit 3.x 系との違いをまとめてみました。
具体的な違い
1.@Testアノテーションの存在
jUnit 4.x 系では、@Test アノテーションのついているメソッドがテストケース(テストメソッド)になります。
jUnit 3.x 系では、テストケースにいちいち testXxx() という名称をつける必要が(事実上)ありましたが、jUnit 4.x 系では、テストケースに好きな名称をつけることができます。
メソッドの命名に自由度が広がるので、テストコードの可読性・保守性を高められそうです。
※Eclipse や Maven で jUnit 3.x 系を実行すると、testXxx() という名称じゃないとテストケースと認識してくれないです。
2.検証メソッドの追加
自動生成されたコードを見てみると、以下のようなロジックがあります。
assertThat(target, is(notNullValue()));
少なくとも、以下のメソッドが追加されていますよね。
- assertThat()
- is()
- notNullValue()
それぞれの意味は、以下の通りです。
(1)assertThat()
・org.junit.Assert#assertThat()
・org.hamcrest.Matchers を第2引数にとり、
第1引数の値が Matchers で指定した内容か
否かを判定します。
(2)is()
・org.hamcrest.CoreMatchers#is()
・引数にクラスを指定します。
・意味は instanceof と同じです。
(3)notNullValue()
・org.hamcrest.CoreMatchers#notNullValue()
・null ではないかをチェックすることを表します。
◆まとめると
assertThat(target, is(notNullValue())) で、
第一引数の target が null ではないかをチェックする内容となっています。
assertThat() を利用すると、第二引数の is() 以下で任意の Matcher を指定することで、複雑な検証も可能ということなのでしょうか?
Interpreter パターンチックですね。