assertFailsWithを使用したKotlinでの例外のテスト
1. 概要
このチュートリアルでは、assertFailsWithメソッドを使用したKotlinでの例外のテストについて説明します。
まず、JUnit 5ライブラリを使用して例外をテストする方法について説明し、次にassertFailsWithメソッド。について説明します。
2. JUnit5の使用
例外は通常のプログラム実行フローを混乱させ、JVM言語の重要な部分です。 実行の処理は、このような問題を適切に処理するための手法です。
Kotinでは、さまざまなライブラリを使用して、例外がスローされることをテストできます。最も一般的なのはJUnitライブラリです。
JUnit 5 Jupiter APIは、テストケースの合格または不合格のステータスを判断するためのいくつかのアサーションメソッドを提供します。 より具体的には、JUnit 5は、Kotlin言語により適したアサーションメソッドをいくつか提供します。
Kotlinで例外をアサートするために使用できるJUnit5のそのようなメソッドの1つは次のとおりです。
fun whenInvalidArray_thenThrowsException() {
assertThrows<ArrayIndexOutOfBoundsException> {
val array = intArrayOf(1, 2, 3)
array[5]
}
}
この例では、期待される ArrayIndexOutOfBoundsException がコードのブロックからスローされると、アサーションは成功します。 さらに、アサーションは、コードのブロックがArrayIndexOutOfBoundsException。の派生型である例外をスローした場合にも機能します。
3. KotlinのassertFailsWithメソッドの使用
Kotlin標準ライブラリは、例外をテストする関数も提供します。
さらに、関数のパラメーターとしてメッセージを定義することもできます。 message はオプションであり、アサーションが失敗した場合にのみ失敗メッセージのプレフィックスとして使用されます。
fun givenInvalidArray_thenThrowsException() {
assertFailsWith<ArrayIndexOutOfBoundsException>(
message = "No exception found",
block = {
val array = intArrayOf(1, 2, 3)
array[5]
}
)
}
上記の例では、ブロックが ArrayIndexOutOfBoundsException。をスローすると、アサーションはパスします。アサーションが失敗すると、メッセージが表示されます。
または、assertFailsWithメソッドを使用して、コードのブロックが特定の例外クラスで失敗したことを表明できます。 この例外クラスは、コードのブロックとともに関数のパラメーターとして定義されています。
fun givenInvalidFormat_thenThrowsException() {
assertFailsWith(
exceptionClass = NumberFormatException::class,
block = { "Kotlin Tutorials in Baeldung".toInt() }
)
}
この例では、アサーションはNumberFormatExceptionがコードのブロックからスローされることを想定しています。
さらに、 assertFailsWithメソッドを使用して、特定の例外クラスとメッセージの両方をパラメーターとしてコードのブロックとともに含めることもできます。
fun givenInvalidOperation_thenThrowsException() {
assertFailsWith(
exceptionClass = ArithmeticException::class,
message = "No exception found",
block = { 50 * 12 / 0 }
)
}
上記の場合、 assertFailsWith メソッドは、コードblockが定義されたArithmeticExceptionをスローすることをアサートします。 指定されたメッセージは、アサーションが失敗するシナリオで使用されます。
3.1. 例外属性のアサート
assertFailsWith メソッドは常に例外タイプを返します。戻り値をさらに調べて、例外属性をアサートできます:
fun givenInvalidNumericFormat_thenThrowsException() {
val exception = assertFailsWith<NumberFormatException>(
block = { Integer.parseInt("abcdefgh") }
)
assertThat(exception.message, equalTo("For input string: \"abcdefgh\""))
}
この例では、 assertFailsWith メソッドは、アサーションが成功した場合に例外を返します。 これにより、例外のmessage属性をアサートできます。
assertFailsWithメソッドは、同じタイプまたはそのサブタイプの例外を常にキャッチします。 ただし、単に指定するのではなく、テストが役立つように、常に正確にする必要があります。 例外また
assertFailsWithメソッドがKotlin標準ライブラリに含まれているため、テストコードに追加のライブラリを含めるオーバーヘッドが削減されます。
したがって、例外をアサートするための単純な単体テストを作成する場合に役立ちます。 ただし、複数のアサーションを含む単体テストを作成する場合は、JUnitアサーションメソッドの方が適しています。
4. 結論
このチュートリアルでは、assertFailsWithメソッドを使用したKotlinでの例外のテストについて説明しました。
いつものように、これらの例のコードはGitHubで入手できます。
Kotlinの機能の詳細については、Kotlinチュートリアルのいずれかをご覧ください。