2015-05-19 3 views
22

В Java, программист может уточнить ожидается исключения для тестирования JUnit таких случаях:Тестовые ожидаемые исключения в Котлин

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

Как бы я сделать это в Котлин? Я попробовал два варианта синтаксиса, но ни один из них не работал:

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 ')' 

ответ

12

Вы можете использовать @Test(expected = ArithmeticException::class) или даже лучше, один из библиотечных методов Котлин как failsWith().

Вы можете сделать его еще короче, используя реифицированные дженерики и вспомогательный метод как это:

inline fun <reified T : Throwable> failsWithX(noinline block:() -> Any) { 
    kotlin.test.failsWith(javaClass<T>(), block) 
} 

И пример использования аннотаций:

@Test(expected = ArithmeticException::class) 
fun omg() { 

} 
+0

'JavaClass ()' является устаревшим в настоящее время. Вместо этого используйте 'MyException :: class.java'. – user2138356

+0

failWith устарел, [assertFailsWith] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.test/assert-fails-with.html) следует использовать вместо этого. – gvlasov

24

Kotlin has its own test helper package, который может помочь сделать этот вид unittest. Добавить

import kotlin.test.* 

И ваш тест может быть очень выразительным с помощью assertFailWith:

@Test 
fun test_arithmethic() { 
    assertFailsWith(ArithmeticException::class) { 
     omg() 
    } 
} 

Убедитесь, что у kotlin-test.jar в вашем пути к классам.

+0

Если вы получили 404 по вашей ссылке, 'kotlin.test' был заменен чем-то другим? – fredoverflow

+0

@fredoverflow Нет, не заменен, а просто удален из стандартных библиотек. Я обновил ссылку на репозиторий github kotlin, но, к сожалению, я не могу найти ссылку на документацию. В любом случае jar отправляется kotlin-плагином в intelliJ, или вы можете найти его в сети или добавить зависимость от maven/grandle для своего проекта. –

+0

компиляция "org.jetbrains.kotlin: kotlin-test: $ kotlin_version" – mac229

7

Для этого можно использовать KotlinTest.

В тесте, вы можете обернуть код с произвольным видом shouldThrow блоком:

shouldThrow<ArithmeticException> { 
    // code in here that you expect to throw a IllegalAccessException 
} 
Смежные вопросы