当我试图在Kotlin测试中使用JUnit 5 Assertions.fail时,由于无法推断参数V,所以编译失败:
import org.junit.jupiter.api.Assertions.fail
internal class MyTests {
@Test
fun simpleTest() {
fail("Does not compile")
}
}当然,解决这个问题的一个简单办法是:
import org.junit.jupiter.api.Assertions.fail
internal class MyTests {
@Test
fun simpleTest() {
val result: Any = fail("Compiles")
}
}但是,我不希望在代码中创建一个未使用的值。是否有一种无需声明val就可以定义类型的方法?为什么在科特林会发生这种事?Java在泛型方面没有这样的问题:
import org.junit.jupiter.api.Assertions.fail;
class MyJavaTests {
@Test
public void simpleTest() {
fail("Compiles);
}
}编辑:我在发布问题后立即发现,解决方案是将调用参数化:
import org.junit.jupiter.api.Assertions.fail
internal class MyTests {
@Test
fun simpleTest() {
fail<Any>("Does not compile")
}
}然而,我仍然愿意接受一个能解释为什么我需要在科特林做这件事的答案。
发布于 2018-10-24 11:01:24
请参阅本期:https://github.com/junit-team/junit5/issues/1209
这似乎已经在junit-jupiter Assertions.kt文件中作为org.junit.jupiter.api包中的顶级函数进行了修正。
导入org.junit.jupiter.api.fail而不是org.junit.jupiter.api.Assertions.fail
https://stackoverflow.com/questions/52967039
复制相似问题