Android Studio 3.0 gradle 3.0.0-beta2打破了Kotlin单元测试覆盖率?

Ely*_*lye 13 android code-coverage jacoco kotlin android-studio-3.0

我有一个简单的Kotlin课程,如下所示

class MyClass {
    fun justSayHello(yes: Boolean): String {
        if (yes) {
            return "Hello"
        } else {
            return "Sorry"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有我的测试(在这里用Java编写,也可以在Kotlin中)

public class MyClassTest {
    private MyClass myClass = new MyClass();

    @Test
    public void testFirst() {
        myClass.justSayHello(true);
    }

    @Test
    public void testSecond() {
        myClass.justSayHello(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在Android Studio 3.0 Beta-2中使用Coverage进行测试时classpath 'com.android.tools.build:gradle:3.0.0-beta2',没有报告任何报道.

但是,当我使用测试时classpath 'com.android.tools.build:gradle:2.3.3',报告了100%的覆盖率.

当我将源代码更改为Java时:

public class MyClass {
    public String justSayHello(boolean yes) {
        if (yes) {
            return "Hello";
        } else {
            return "Sorry";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于两个gradle构建工具

在我看来'com.android.tools.build:gradle:3.0.0-beta2',Kotlin的测试覆盖率测量值已经下降.

我错过了什么吗?我可以在Kotlin获得测试报道吗?

Mar*_*per 6

如果有人仍在寻找解决方案,则添加gradle任务以将案例从tmp目录复制到coverage输出所查找的目录中有助于解决此问题.

例如,将copyTestClasses添加到模块gradle文件中

task copyTestClasses(type: Copy) {
    from "build/tmp/kotlin-classes/debug"
    into "build/intermediates/classes/debug"
}
Run Code Online (Sandbox Code Playgroud)

然后设置默认值以在运行测试之前运行gradle任务 设置gradle任务的示例

在尝试使用gradle指向它们之前,可以帮助手动查找项目中的两个目录,以确保指向正确的位置(flavor会更改您需要指向的目录)