Junit 5 Assertions.fail() 无法推断 Kotlin 中的类型

Dea*_*ean 1 kotlin junit5

当我尝试在 Kotlin 测试中使用 JUnit 5 Assertions.fail 时,我编译失败,因为无法推断参数 V:

import org.junit.jupiter.api.Assertions.fail
internal class MyTests {
   @Test
   fun simpleTest() {
     fail("Does not compile") 
   }
}
Run Code Online (Sandbox Code Playgroud)

当然,这个问题的一个简单解决方案是:

import org.junit.jupiter.api.Assertions.fail
internal class MyTests {
   @Test
   fun simpleTest() {
     val result: Any = fail("Compiles") 
   }
}
Run Code Online (Sandbox Code Playgroud)

但是我不想在我的代码中创建一个未使用的值。有没有办法定义类型而不必声明 val?另外,为什么在 Kotlin 中会发生这种情况?Java 对泛型没有这样的问题:

import org.junit.jupiter.api.Assertions.fail;
class MyJavaTests {
    @Test
    public void simpleTest() {
        fail("Compiles);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我在发布问题后立即发现解决方案是参数化调用:

import org.junit.jupiter.api.Assertions.fail
internal class MyTests {
   @Test
   fun simpleTest() {
     fail<Any>("Does not compile") 
   }
 }
Run Code Online (Sandbox Code Playgroud)

但是仍然愿意接受可以解释为什么我需要在 kotlin 中执行此操作的答案。

Uzi*_*ies 5

请看这个问题:https : //github.com/junit-team/junit5/issues/1209

似乎这已经在 junit-jupiter-api Assertions.kt 文件中作为 org.junit.jupiter.api 包中的顶级函数进行了修复。

导入org.junit.jupiter.api.fail而不是 org.junit.jupiter.api。断言.fail

  • 感谢您链接问题。我的版本是5.1.1。它也在这个中得到修复,您的第二个链接揭示了真正的问题。导入错误。应该是 org.junit.jupiter.api.fail 。如果您修改我会接受答案 (2认同)