2015-05-19 5 views
22

In Java kann der Programmierer Ausnahmen für JUnit-Testfälle wie diese angeben erwartet:-Test zu erwarten Ausnahmen in Kotlin

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

Wie würde ich dies tun in Kotlin? Ich habe zwei weitere Syntaxvarianten ausprobiert, aber keiner von ihnen arbeitete:

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

Antwort

28

Die Syntax ist einfach:

@Test(expected = ArithmeticException::class) 
12

Sie @Test(expected = ArithmeticException::class) oder noch besser eine der Kotlin Bibliothek Methoden wie failsWith() verwenden können.

Sie können es noch kürzer machen, indem verdinglicht die Verwendung von Generika und eine Hilfsmethode wie folgt aus:

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

Und Beispiel mit der Anmerkung:

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

} 
+0

'Java ()' ist veraltet. Verwenden Sie stattdessen 'MyException :: class.java'. – user2138356

+0

failsWith ist veraltet, [assertFailsWith] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.test/assert-fails-with.html) sollte stattdessen verwendet werden. – gvlasov

24

Kotlin has its own test helper package das kann helfen, diese Art von Unittest zu machen. In

import kotlin.test.* 

Und Ihr Test kann sehr ausdrucksstark sein durch Verwendung assertFailWith:

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

Stellen Sie sicher, kotlin-test.jar in Ihrem Klassenpfad haben.

+0

Wenn Sie eine 404 auf Ihrem Link erhalten, wurde 'kotlin.test' durch etwas anderes ersetzt? – fredoverflow

+0

@preveroverflow Nein, wird nicht ersetzt, sondern nur aus Standardbibliotheken entfernt. Ich habe den Link zu Github Kotlin Repository aktualisiert, aber leider kann ich keinen Link zur Dokumentation finden. Anyway jar wird von kotlin-plugin in intelliJ ausgeliefert oder Sie können es im Internet finden oder maven/grandle Abhängigkeit zu Ihrem Projekt hinzufügen. –

+0

kompilieren "org.jetbrains.kotlin: kotlin-test: $ kotlin_version" – mac229

7

Sie können hierfür KotlinTest verwenden.

In Ihrem Test können Sie willkürlichen Code mit einem shouldThrow Block wickeln:

shouldThrow<ArithmeticException> { 
    // code in here that you expect to throw a IllegalAccessException 
} 
Verwandte Themen