当我尝试在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")
}
}
但是,仍然愿意接受可以解释为什么我需要在Kotlin中这样做的答案。
答案 0 :(得分:2)
请查看此问题:https://github.com/junit-team/junit5/issues/1209
这似乎已经在jun.jupiter-api Assertions.kt文件中作为org.junit.jupiter.api软件包中的顶级功能得到了解决。
导入 org.junit.jupiter.api.fail ,而不是org.junit.jupiter.api。断言 .fail