fre*_*low 56 testing unit-testing exception kotlin
在Java中,程序员可以为JUnit测试用例指定预期的异常,如下所示:
@Test(expected = ArithmeticException.class)
public void omg()
{
int blackHole = 1 / 0;
}
Run Code Online (Sandbox Code Playgroud)
我怎么在Kotlin做这个?我尝试了两种语法变体,但没有一种工作:
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 ')'
Run Code Online (Sandbox Code Playgroud)
fre*_*low 82
语法很简单:
@Test(expected = ArithmeticException::class)
Run Code Online (Sandbox Code Playgroud)
Mic*_*ico 62
Kotlin有自己的测试帮助程序包,可以帮助进行这种单元测试.加
import kotlin.test.*
Run Code Online (Sandbox Code Playgroud)
并且您的测试可以通过使用非常具有表现力assertFailWith
:
@Test
fun test_arithmethic() {
assertFailsWith(ArithmeticException::class) {
omg()
}
}
Run Code Online (Sandbox Code Playgroud)
确保kotlin-test.jar
你的班级路径.
Kir*_*man 19
您可以使用@Test(expected = ArithmeticException::class)
甚至更好的Kotlin库方法之一failsWith()
.
你可以使用reified泛型和这样的辅助方法使它更短:
inline fun <reified T : Throwable> failsWithX(noinline block: () -> Any) {
kotlin.test.failsWith(javaClass<T>(), block)
}
Run Code Online (Sandbox Code Playgroud)
以及使用注释的示例:
@Test(expected = ArithmeticException::class)
fun omg() {
}
Run Code Online (Sandbox Code Playgroud)
mon*_*ack 14
你可以使用KotlinTest.
在测试中,您可以使用shouldThrow块来包装任意代码:
shouldThrow<ArithmeticException> {
// code in here that you expect to throw a ArithmeticException
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*ung 14
JUnit5内置了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 }
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
您还可以将泛型与kotlin.test包一起使用:
import kotlin.test.assertFailsWith
@Test
fun testFunction() {
assertFailsWith<MyException> {
// The code that will throw MyException
}
}
Run Code Online (Sandbox Code Playgroud)
没有人提到assertFailsWith()返回值,你可以检查异常属性:
@Test
fun `my test`() {
val exception = assertFailsWith<MyException> {method()}
assertThat(exception.message, equalTo("oops!"))
}
}
Run Code Online (Sandbox Code Playgroud)