jUnitで例外の中身をテストする
jUnitで例外の中身(Messageやその他独自定義のフィールド値)を検査する方法の備忘録
例外とその内容のテスト
@Test public void testThrowable(){ assertAll( () -> { IllegalArgumentException iae = assertThrows( IllegalArgumentException.class, ()->{ testTargetMethod(); } ); assertEquals("expected message", iae.getMessage()); } ); }
肝は、assertThrows(Class
が戻り値に発生した例外を返すという点です。
jUnitのJavaDocを参照すると戻り値が<T extends Throwable>
であることが確認できます
これにより、発生する例外のcause
やmessage
が意図したものであることがテストできます
独自例外の独自フィールド
class MyException extends RuntimeException { public int limit; public MyException(int limit){ super(); this.limit = limit; } } class MyExceptionTest{ @Test public void testMyExLimit(){ int val = 27; assertAll( () -> { MyException throwed = assertThrows( MyException.class, () -> { throw new MyException(val); } ); assertEquals(val, throwed.limit); } ); }
特段変わったことはなく、getterを設けるのであればそれを使用するくらいかと思います。