Android Studio 3.0 gradle 3.0.0-beta2 нарушает покрытие Kotlin Unit Test?

У меня есть простые классы Kotlin, как показано ниже

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

У меня есть тест (здесь написан на Java, может быть и на Котлине)

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

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

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

Когда я запускаю тест с покрытием в Android Studio 3.0 Beta-2, используя 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";
        }
    }
}

Он отлично работает для обоих инструментов сборки gradle.

Мне кажется, что 'com.android.tools.build:gradle:3.0.0-beta2' имеет неработающее измерение тестового покрытия для Kotlin.

Я что-то пропустил? Есть ли обходной путь для получения тестового покрытия в Котлине?


person Elye    schedule 22.08.2017    source источник
comment
Я сообщил о проблеме на странице issuetracker.google.com/issues/64929213.   -  person Elye    schedule 22.08.2017


Ответы (1)


В случае, если кто-то все еще ищет решение, добавление задачи gradle для копирования случаев из каталога tmp в каталог, в котором просматривается вывод покрытия, помогает решить эту проблему в качестве обходного пути.

Например, добавьте copyTestClasses в файл градиента вашего модуля.

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

А затем настройте параметры по умолчанию для запуска задачи gradle перед запуском тестов Пример настройки задачи градиента

Это может помочь найти оба каталога в вашем проекте вручную, прежде чем пытаться указать на них с помощью gradle, чтобы убедиться, что вы указываете в нужное место (ароматы изменят каталоги, на которые вам нужно указать)

person Marcus Hooper    schedule 12.12.2017
comment
Об этом сообщается в stackoverflow.com/a/45354933/3286489. Но если внимательно присмотреться, он сообщает о покрытии тестового кода, а не кода приложения. :( - person Elye; 12.12.2017
comment
Причина, по которой сообщается о покрытии тестовых классов, заключается в том, что он копирует из /debugUnitTest, а не /debug - person Marcus Hooper; 12.12.2017
comment
нет папки отладки, если нет классов kotlin - person WenChao; 16.01.2018
comment
То же самое с Android Studio 3.0.1, я отметил галочкой: issuetracker.google.com /u/1/issues/73730680 - person Chriss; 22.02.2018
comment
Кроме того, если вы используете модуль как обычную библиотеку kotlin, используйте вместо этого: task copyTestClasses(type: Copy) { from build/classes/kotlin to build/classes/java} - person Deividas Strioga; 25.05.2018