Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Studio 3.0 gradle 3.0.0-beta2, breaks Kotlin Unit Test Coverage?

I have a simple Kotlin classes, as below

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

I have my test (written in Java here, could be in Kotlin, also)

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

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

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

When I run a test with Coverage in Android Studio 3.0 Beta-2 using classpath 'com.android.tools.build:gradle:3.0.0-beta2', no coverage is reported for it.

But when I run the test using classpath 'com.android.tools.build:gradle:2.3.3', 100% coverage reported.

When I change my source code to Java:

public class MyClass {
    public String justSayHello(boolean yes) {
        if (yes) {
            return "Hello";
        } else {
            return "Sorry";
        }
    }
}

It works fine for both gradle build tools

It seems to me that 'com.android.tools.build:gradle:3.0.0-beta2' has the broken test coverage measurement for Kotlin.

Did I miss anything? Is there a workaround for me to get the test coverage in Kotlin?

like image 454
Elye Avatar asked Aug 22 '17 13:08

Elye


1 Answers

In case anyone is still looking for a solution, adding in a gradle task to copy the cases from the tmp directory into the directory that the coverage output looks in helps with this issue as a workaround.

For example add copyTestClasses to your module gradle file

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

And then setting up your defaults to run the gradle task before running the tests Example of setting up gradle task

It can help to find both of the directories in your project manually before trying to point to them using gradle, to make sure that you're pointing to the right place (flavours will change the directories that you need to point to)

like image 164
Marcus Hooper Avatar answered Oct 02 '22 23:10

Marcus Hooper