EeBlog(テクニカルブログ)

第80回 JUnit4 その8

引き続き「JUnit4」について学んでいきます。

今回はassertThatメソッドを学びます。

assertThatメソッドはJUnit4.4で追加されたアサーションメソッドです。
assertNullメソッドなどのように直接比較を行うのではなく、比較処理を引数で記述します。

従来のアサーションメソッドに対する、assertThatメソッドのメリットは次の通りです。
・英文に近くなり、可読性が高い
・失敗時のメッセージの内容が理解しやすい
・比較処理を組み合わせることができる
・比較処理のカスタマイズができる

assertThatの比較用クラスの一つに、org.hamcrest.CoreMatchersクラスがあります。
英文として理解しやすいisメソッド、全ての条件が正しくなければテスト失敗となるallOfメソッドなど有用なメソッドが実装されています。

では、今回はCoreMatchersクラスを使ったサンプルを実行してみましょう。

public class Sample {


     public static Object returnNull() {
         return null;
     }


     public static int returnOne() {
         return 1;
     }


     public static boolean isOne(int i) {
         return i == 1 ? true : false;
     }


     public static boolean returnTrue() {
         return true;
     }


     public static Object returnNewObject() {
         return new Object();
     }
}
import static org.hamcrest.CoreMatchers.*;
 import static org.junit.Assert.*;


 import org.junit.Test;
 import org.junit.runner.JUnitCore;


 public class SampleTest {


     public static void main(String[] args) {
         JUnitCore.main(SampleTest.class.getName());
     }


     @Test
     public void returnNull() {
         assertThat(Sample.returnNull(), nullValue());
     }


     @Test
     public void returnOne() {
         assertThat(Sample.returnOne(), equalTo(1));
     }


     @Test
     public void isOne() {
         assertThat(Sample.isOne(0), is(false));
         assertThat(Sample.isOne(1), is(true));
         assertThat(Sample.isOne(2), is(not(true)));
     }


     @SuppressWarnings("unchecked")
     @Test
     public void returnObject() {
         assertThat(Sample.returnNewObject(), allOf(notNullValue()
                                            , instanceOf(Object.class)));
     }
 }

従来のアサーションメソッドより柔軟にテストが行えるようになりましたね。