2017-08-22 27 views
10

Mam proste klas Kotlin, jak poniżejAndroid Studio 3.0 gradle 3.0.0-beta2, łamie pokrycia testowe jednostki Kotlin?

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

Mam testu (napisany w Javie tutaj, może być w Kotlin, również)

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

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

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

Kiedy uruchamiam test z zasięgiem w Android Studio 3.0 Beta-2 przy użyciu classpath 'com.android.tools.build:gradle:3.0.0-beta2', nie zgłoszono dla niego zasięgu.

Ale po uruchomieniu testu przy użyciu classpath 'com.android.tools.build:gradle:2.3.3', zgłoszono 100% zasięgu.

Kiedy mogę zmienić kod źródłowy Java:

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

To działa dobrze dla obu Gradle narzędzi budowania

Wydaje mi się, że ma złamaną 'com.android.tools.build:gradle:3.0.0-beta2' pomiar pokrycia test dla Kotlin.

Czy coś mi umknęło? Czy istnieje sposób na obejście testów w Kotlin?

+3

Zgłosiłem, że jest pozwać w https://issuetracker.google.com/issues/64929213 – Elye

Odpowiedz

3

Jeśli ktoś nadal szuka rozwiązania, dodanie zadania gradle do skopiowania przypadków z katalogu tmp do katalogu, w którym wygląda wynik pokrycia, pomaga w rozwiązaniu tego problemu.

Na przykład dodać copyTestClasses do modułu Gradle plik

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

a następnie ustawiając swoje domyślne uruchomić Gradle zadanie przed uruchomieniem testów Example of setting up gradle task

To może pomóc znaleźć zarówno katalogi w projekcie ręcznie, zanim spróbujesz wskazać je za pomocą gradle, aby upewnić się, że wskazujesz właściwe miejsce (smaki zmienią katalogi, które musisz wskazać)

+0

Jest to zgodne z raportem https://stackoverflow.com/a/45354933/3286489. Ale jeśli uważnie obserwujesz, raportuje zasięg kodu testowego, a nie kod aplikacji. :( – Elye

+0

Powodem, dla którego raportuje się pokrycie klas testowych, jest to, że kopiuje z/debugUnitTest, a nie/debuguje –

+0

nie ma folderu debugowania, jeśli nie ma klas kotlin – WenChao

Powiązane problemy