直接调用Kotlin中的内联fun,而不是内联它

直接调用Kotlin中的内联fun,而不是内联它,kotlin,inline,Kotlin,Inline,考虑以下简单方法: inline fun foo(crossinline bar: () -> Unit) = foo(2) { bar() } 现在,我正在尝试测试此实现: @Test fun `test foo`() { val action = mock<() -> Unit>() foo(action) verify(action)() } 因为这个测试也是用Kotlin编写的,所以编译器内联foo,启用测试覆盖率后,fooJava方法

考虑以下简单方法:

inline fun foo(crossinline bar: () -> Unit) = foo(2) { bar() }
现在,我正在尝试测试此实现:

@Test
fun `test foo`() {
    val action = mock<() -> Unit>()
    foo(action)
    verify(action)()
}
因为这个测试也是用Kotlin编写的,所以编译器内联foo,启用测试覆盖率后,fooJava方法显示为未覆盖


现在我想知道,在这种情况下,如何将环境或测试配置为不内联函数?

您不能这样做。内联函数总是内联的;它们的许多特性都依赖于此,您不能简单地决定不将它们内联

解决这个问题的正确方法是在您正在使用的覆盖率框架中实现对Kotlin内联函数的支持,这样它就会意识到函数确实被调用了。Kotlin编译器生成的.class文件包含足够的信息


jacoco的相应问题是。

你不能这样做。内联函数总是内联的;它们的许多特性都依赖于此,您不能简单地决定不将它们内联

解决这个问题的正确方法是在您正在使用的覆盖率框架中实现对Kotlin内联函数的支持,这样它就会意识到函数确实被调用了。Kotlin编译器生成的.class文件包含足够的信息


jacoco的相应问题是。

也许我理解错了我的发现,但是用Java实现测试,不需要内联就可以直接调用函数吗?不是所有Kotlin内联函数都可以从Java调用,当您调用它们时,并非所有函数都能正常工作,例如,非本地返回将不起作用。也许我误解了我的发现,但是否可以用Java实现测试,以便能够在不使用内联的情况下直接调用函数?并非所有Kotlin内联函数都可以从Java调用,当你打电话给他们时,并不是所有的都能正常工作,例如,非本地返回将不起作用。