Kotlin for assertThat(foo,instanceOf(Bar.class))

时间:2017-07-06 09:14:42

标签: junit kotlin

你如何用Kotlin写assertThat(foo, instanceOf(Bar.class))

似乎它不喜欢.class

我想寻求一个更精确的说法"精确"而不仅仅是assertTrue(foo is Bar),如果可能的话

3 个答案:

答案 0 :(得分:6)

Bar::class返回KClass的实例,这是Kotlin相当于Java的Class

instanceOf方法需要Class个实例,而不是KClass,因此您必须使用Bar::class.java转换它。

所以你的断言应该是这样的:

assertThat(foo, instanceOf(Bar::class.java))

有关Java interop的更多信息,您可以找到here

另外,您可以查看Hamkrest库,这可以为您的断言增加更多的流畅性:

assert.that(foo, isA<Bar>())

答案 1 :(得分:3)

assertThat(foo, instanceOf(Bar::class.java))

文档:https://kotlinlang.org/docs/reference/java-interop.html#getclass

答案 2 :(得分:0)

您可以使用Atrium(https://atriumlib.org)并编写以下内容

assertThat(foo).isA<Bar>{} 

如果您想断言有关foo的更多信息,比如说Bar有一个val baz: Int,那么您可以编写以下内容

assertThat(foo).isA<Bar> { 
  property(subject::baz).isSmallerThan(41) 
}