你如何用Kotlin写assertThat(foo, instanceOf(Bar.class))
?
似乎它不喜欢.class
我想寻求一个更精确的说法"精确"而不仅仅是assertTrue(foo is Bar)
,如果可能的话
答案 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)
}