kotlin + junit 5 - 断言所有用法

时间:2018-05-23 14:46:50

标签: kotlin junit5

我使用junit 5的下一个版本

    <junit.jupiter.version>5.2.0</junit.jupiter.version>
    <junit.platform.version>1.2.0</junit.platform.version>
    <junit.vintage.version>5.2.0</junit.vintage.version>

Kotlin版本

    <kotlin.version>1.2.31</kotlin.version>

我尝试使用junit 5中的新断言功能与kotlin一样

assertAll("person",
    { assertEquals("John", person.firstName) },
    { assertEquals("Doe", person.lastName) }
)

但是代码分析器说没有找到合适的方法版本。

Error:(28, 9) Kotlin: None of the following functions can be called with the arguments supplied: 
    public fun assertAll(vararg executables: () -> Unit): Unit defined in org.junit.jupiter.api
    public fun assertAll(heading: String?, vararg executables: () -> Unit): Unit defined in org.junit.jupiter.api

如果我这样编写代码就行了。有什么诀窍?

assertAll("person",
    Executable { assertEquals("John", person.firstName) },
    Executable { assertEquals("Doe", person.lastName) }
)

1 个答案:

答案 0 :(得分:4)

使用Kotlin函数assertAll()而不是静态函数Assertions.assertAll(),您会很高兴。从以下地址更改您的导入:

import org.junit.jupiter.api.Assertions.assertAll

为:

import org.junit.jupiter.api.assertAll

现在这段代码将起作用:

assertAll("person",
    { assertEquals("John", person.firstName) },
    { assertEquals("Doe", person.lastName) }
)

您可能有兴趣知道JUnit 5在其主要源代码中包含Kotlin助手,直接来自JUnit团队!

如果你真的,真的,真的想要使用直接的Java版本,你需要输入你的Lambda:

assertAll("person",
    Executable { assertEquals("John", person.firstName) },
    Executable { assertEquals("Doe", person.lastName) }
)