Android(kotlin)でThrowをassertしたい
ルー大柴みたいなタイトルですが、Androidで例外処理のアサーションチェックをしたいということです。
少し躓いたので、やり方を共有したいと思います。
色々なやり方があるらしい
try-catchを使ったやり方などもありますが、多く出てきたのは以下のやり方です[1][2]。
以下のコードはcodechacha.com[1:1]から引用しています。
@Rule
public ExpectedException exceptionRule = ExpectedException.none();
@Test
public void testExceptionThrown() {
exceptionRule.expect(NullPointerException.class);
String str = null;
str.contains("a");
}
このように、ExpectedException.none()
を使ったやり方です。
しかし、これは現在非推奨になっています。
他の方法としてassertThrowsを使う方法があります。
この記事[3]のコードをkotlinに書き換えて使いたいと思います。
@Test
fun assertTest() {
val e: java.lang.IllegalArgumentException = assertThrows(
IllegalArgumentException::class.java
) {
throw IllegalArgumentException("aa")
}
}
これで、例外の種類 をassertすることが出来ました。試しにthrow IllegalArgumentException("aa")
をthrow NullPointerException("aa")
と書き換えるとテストが通らなくなります。
また、例外のメッセージを検証したいというニーズがあると思います。その時はassertEquals(e.message, "aa")
を以下のように追加すればOKです。
@Test
fun assertTest() {
val e: java.lang.IllegalArgumentException = assertThrows(
IllegalArgumentException::class.java
) {
throw IllegalArgumentException("aa")
}
assertEquals(e.message, "aa")
}
-
JUnitのExceptionテスト / codechacha.com https://codechacha.com/ja/assert-exception-thrown/ (2022-01-14閲覧) ↩︎ ↩︎
-
assert - java 例外 発生させる テスト - JUnit 4 のテストで特定の例外がスローされることをアサートするには? / https://lycaeum.dev/ja/questions/156503 (2022-01-14閲覧) ↩︎
-
JUnit5(Alpha版)使い方メモ / @opengl-8080 on Qiita https://qiita.com/opengl-8080/items/40a922bfdd2709aaea1f (2022-01-14閲覧) ↩︎
Discussion