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

时间:2018-10-24 10:46:44

标签: 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") 
   }
}

当然,解决此问题的简单方法是:

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中这样做的答案。

1 个答案:

答案 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