2017-08-22 1 views
10

Ich habe eine einfache Kotlin Klassen, wie weiter untenAndroid Studio 3.0 Gradle 3.0.0-Beta2, bricht Kotlin Unit Test Coverage?

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

ich meinen Test haben (in Java geschrieben hier in Kotlin sein könnte, auch)

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

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

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

Wenn ich einen Test mit Coverage laufen in Android Studio 3.0 Beta-2 mit classpath 'com.android.tools.build:gradle:3.0.0-beta2', wird keine Berichterstattung dafür gemeldet.

Aber wenn ich den Test unter Verwendung classpath 'com.android.tools.build:gradle:2.3.3' laufen lasse, berichtete 100% Deckung.

Wenn ich meinen Quellcode zu Java ändern:

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

Es funktioniert gut für beiden gradle Build-Tools

Es scheint, dass 'com.android.tools.build:gradle:3.0.0-beta2' die gebrochene Testabdeckung Messung für Kotlin hat.

Habe ich etwas übersehen? Gibt es einen Workaround für mich, um die Testabdeckung in Kotlin zu erhalten?

+3

Ich berichtete die ist Klage in https://issuetracker.google.com/issues/64929213 – Elye

Antwort

3

Falls jemand noch nach einer Lösung sucht, hilft das Hinzufügen einer Großaufgabetask zum Kopieren der Fälle aus dem tmp-Verzeichnis in das Verzeichnis, in dem die Coverageausgabe eingesehen wird, mit diesem Problem als Workaround.

Zum Beispiel hinzufügen copyTestClasses zu Ihrem Modul gradle Datei

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

und dann Voreinstellungen einrichten, um die gradle Aufgabe ausführen, bevor die Tests ausgeführt Example of setting up gradle task

Es kann sowohl der Verzeichnisse finden helfen in Ihrem Projekt manuell, bevor Sie versuchen, mit Gradle auf sie zu zeigen, um sicherzustellen, dass Sie auf den richtigen Platz zeigen (Aromen werden die Verzeichnisse ändern, auf die Sie zeigen müssen)

+0

Dies ist wie in https://stackoverflow.com/a/45354933/3286489 berichtet. Bei genauerer Betrachtung wird jedoch die Abdeckung des Testcodes gemeldet, nicht der App-Code. :( – Elye

+0

Der Grund, dass man die Abdeckung der Testklassen berichtet, ist, weil es von/debugUnitTest kopiert und nicht/debug –

+0

gibt es keinen Debug-Ordner, wenn es keine Kotlin-Klassen gibt – WenChao

Verwandte Themen