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?
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
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With