第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))); } }
従来のアサーションメソッドより柔軟にテストが行えるようになりましたね。