1. ホーム
  2. unit-testing

[解決済み] Kotlinで期待される例外をテストする

2022-08-27 08:26:49

質問

Javaでは、プログラマはJUnitのテストケースで予想される例外を次のように指定することができます。

@Test(expected = ArithmeticException.class)
public void omg()
{
    int blackHole = 1 / 0;
}

Kotlinでこれを行うにはどうしたらよいでしょうか。私は2つの構文のバリエーションを試しましたが、どれもうまくいきませんでした。

import org.junit.Test

// ...

@Test(expected = ArithmeticException) fun omg()
    Please specify constructor invocation;
    classifier 'ArithmeticException' does not have a companion object

@Test(expected = ArithmeticException.class) fun omg()
                            name expected ^
                                            ^ expected ')'

どのように解決するのですか?

のJavaの例のKotlin翻訳が JUnit 4.12 です。

@Test(expected = ArithmeticException::class)
fun omg() {
    val blackHole = 1 / 0
}

しかし JUnit 4.13 導入 assertThrows メソッドを導入しました。

@Test
fun omg() {
    // ...
    assertThrows(ArithmeticException::class.java) {
        val blackHole = 1 / 0
    }
    // ...
}

どちらも assertThrows メソッドは、追加のアサーションに対して期待される例外を返します。

@Test
fun omg() {
    // ...
    val exception = assertThrows(ArithmeticException::class.java) {
        val blackHole = 1 / 0
    }
    assertEquals("/ by zero", exception.message)
    // ...
}