Kotlin内联关键字导致IntelliJ IDEA覆盖率报告为0%

14

我创建了一个非常简单的测试函数,如下所示

class SimpleClassTest {

    lateinit var simpleObject: SimpleClass
    @Mock lateinit var injectedObject: InjectedClass


    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
    }

    @Test
    fun testSimpleFunction() {
        simpleObject = lookupInstance()
    }

    inline fun lookupInstance() = SimpleClass(injectedObject)
}

我使用Coverage运行它...测试覆盖率为0%。但是,如果我删除inline关键字,则现在测试覆盖率数字将显示。

这是Kotlin问题还是Android IntelliJ IDEA覆盖范围问题?(注意:JaCoco覆盖范围很好)。

注意:我正在使用Android Studio 2.0和Kotlin 1.0.2。


你在测试输出中是否偶尔遇到了ArrayIndexOutOfBoundsException? - daemontus
1个回答

3

当一个内联函数被编译时,编译器基本上会将其主体粘贴到调用站点中(代替函数调用)。这意味着覆盖分析无法判断它是内联函数,因为它实际上并不存在于定义它的位置。换句话说,这种行为是内联函数的本质特性。


1
当使用inline时,没有理由将其他人的覆盖范围全部计为零。JaCoco可以正常工作,所以上述解释根本无法说明问题。 - Elye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接