目次
概要
JUnit5における基本的なAssertionをまとめました。
検証方法
等価性
値が等価であるかを検証するメソッドです。
以下はorg.junit.jupiter.api.Assertions と org.hamcrestを使用した例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class AssertionTest { @Test void testEquals() { // setUp String actual = ""; // assert assertEquals("", actual); assertThat(actual, is("")); } } |
NULL
NULL値であるかを検証するメソッドです。
検証可能なメソッドは複数ありますので、可読性を考慮して適切なメソッドを選べばよいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.Matchers.notNullValue; import static org.junit.jupiter.api.Assertions.*; public class AssertionTest { @Test void testNull() { // setUp String actual = null; // assert assertEquals(null, actual); assertThat(actual, nullValue()); assertNull(actual); } @Test void testNotNull() { // setUp String actual = "some string."; // assert assertNotEquals(null, actual); assertThat(actual, notNullValue()); assertNotNull(actual); } } |
例外
例外をスローするかを検証するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class AssertionTest { /** * 検証用のインナークラス * (SetterでParseすることで、NumberFormatExceptionが起こりうる状況を * あえて作り出しています) */ class Inner { private Integer integer; public void setInteger(Object arg) { integer = Integer.parseInt((String) arg); } } @Test void testThrows() { // setUp Inner inner = new Inner(); // assert assertThrows(NumberFormatException.class , () -> inner.setInteger("int value.")); } @Test void testNotThrows() { // setUp Inner inner = new Inner(); // assert assertDoesNotThrow(() -> inner.setInteger("1")); } } |
同値性
同値であるかを検証するメソッドです。
プリミティブ型であればassertEqualsと何ら変わりありませんが、
オブジェクト型の場合は参照先(インスタンス)が同一であるかを検証します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class AssertionTest { class Inner { private Integer integer; public void setInteger(Object arg) { integer = Integer.parseInt((String) arg); } } @Test void testSame() { // setUp Inner inner = new Inner(); // execute Inner other = inner; // execute Inner other = inner; inner.setInteger("1"); other.setInteger("2"); // assert assertSame(inner, other); } @Test void testNotSame() { // setUp Inner inner1 = new Inner(); Inner inner2 = new Inner(); // assert assertNotSame(inner1, inner2); } } |
全検証
通常、複数の検証の一部が失敗した場合は後続の検証は行われませんが、
assertAllを使うと複数の検証を必ず全て実行させることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class AssertionTest { @Test void testAll() { // setUp String actual = ""; // assert // 引数に渡す値は関数型インターフェースとすること assertAll( () -> assertEquals("", actual), () -> assertThat(actual, is("")) ); } } |
まとめ
- 検証では値に適したメソッドを使用する。
- 複数の検証の一部が失敗すると後続の検証は行われない。
ただし、assertAllで実行した場合は失敗に関わらず全ての検証が実行される。
参考
- JUnit 5 ユーザーガイド
基本的な情報源はこちらになります。 -
サードパーティーのアサーションライブラリ
hamcrestについてはこちらに記載があります。
コメント