The HIRO Says

If you smell what The HIRO is cooking!!!

slim3のテストコードの注意点

slim3 でプログラムを生成すると、自動的にテストコードも作成してくれます。
ただ、テストコードは jUnit 4.7 を使用しているため、3.x 系とは色々と違うところがあります。
(私は知らなかったのでハマりました…)
今回は、jUnit 3.x 系との違いをまとめてみました。


具体的な違い

1.@Testアノテーションの存在

jUnit 4.x 系では、@Test アノテーションのついているメソッドがテストケース(テストメソッド)になります。
jUnit 3.x 系では、テストケースにいちいち testXxx() という名称をつける必要が(事実上)ありましたが、jUnit 4.x 系では、テストケースに好きな名称をつけることができます。
メソッドの命名に自由度が広がるので、テストコードの可読性・保守性を高められそうです。
EclipseMavenjUnit 3.x 系を実行すると、testXxx() という名称じゃないとテストケースと認識してくれないです。

2.検証メソッドの追加

自動生成されたコードを見てみると、以下のようなロジックがあります。

    assertThat(target, is(notNullValue()));


少なくとも、以下のメソッドが追加されていますよね。

  1. assertThat()
  2. is()
  3. 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 パターンチックですね。