Javaでは、プログラマは次のようにJUnitテストケースに予期される例外を指定できます。
@Test(expected = ArithmeticException.class)
public void omg()
{
int blackHole = 1 / 0;
}
Kotlinでこれを行うにはどうすればよいですか? 2つの構文バリエーションを試しましたが、どれも機能しませんでした。
import org.junit.Test as 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 ')'
構文は単純です:
@Test(expected = ArithmeticException::class)
Kotlinには独自のテストヘルパーパッケージがあります この種類の単体テストの実行に役立ちます。追加する
import kotlin.test.*
そして、あなたのテストはassertFailWith
を使うことで非常に表現力豊かになります:
@Test
fun test_arithmethic() {
assertFailsWith(ArithmeticException::class) {
omg()
}
}
kotlin-test.jar
クラスパス。
@Test(expected = ArithmeticException::class)
を使用できます。または、 failsWith()
のようなKotlinのライブラリメソッドのいずれかを使用できます。
具象化されたジェネリックと次のようなヘルパーメソッドを使用すると、さらに短くすることができます。
inline fun <reified T : Throwable> failsWithX(noinline block: () -> Any) {
kotlin.test.failsWith(javaClass<T>(), block)
}
そして、注釈を使用した例:
@Test(expected = ArithmeticException::class)
fun omg() {
}
これには KotlinTest を使用できます。
テストでは、shouldThrowブロックで任意のコードをラップできます。
shouldThrow<ArithmeticException> {
// code in here that you expect to throw a ArithmeticException
}
Kotlin.testパッケージでジェネリックを使用することもできます:
import kotlin.test.assertFailsWith
@Test
fun testFunction() {
assertFailsWith<MyException> {
// The code that will throw MyException
}
}
JUnit 5.1には kotlinサポート が組み込まれています。
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
class MyTests {
@Test
fun `division by zero -- should throw ArithmeticException`() {
assertThrows<ArithmeticException> { 1 / 0 }
}
}