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

时间:2017-08-22 13:56:58

标签: android kotlin code-coverage jacoco android-studio-3.0

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

class MyClass {
    fun justSayHello(yes: Boolean): String {
        if (yes) {
            return "Hello"
        } else {
            return "Sorry"
        }
    }
}

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

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

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

    @Test
    public void testSecond() {
        myClass.justSayHello(false);
    }
}

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

但是当我使用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";
        }
    }
}

它适用于两个gradle构建工具

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

我错过了什么吗?我有没有办法解决Kotlin的测试问题?

1 个答案:

答案 0 :(得分:6)

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

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

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

然后设置默认值以在运行测试之前运行gradle任务 Example of setting up gradle task

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