2016-05-24 32 views
9

I stworzył bardzo prostą funkcję testową jak poniżejKotlin inline kluczowe powodując IntelliJ IDEA raportowania 0% pokrycia

class SimpleClassTest { 

    lateinit var simpleObject: SimpleClass 
    @Mock lateinit var injectedObject: InjectedClass 


    @Before 
    fun setUp() { 
     MockitoAnnotations.initMocks(this) 
    } 

    @Test 
    fun testSimpleFunction() { 
     simpleObject = lookupInstance() 
    } 

    inline fun lookupInstance() = SimpleClass(injectedObject) 
} 

go uruchomić z zasięgiem ... Numer pokrycie testowe wynosi 0%. Ale jeśli usunę słowo kluczowe inline, pojawi się numer pokrycia testowego.

Czy to jest problem z kotliną czy systemem Android IntelliJ IDEA? (uwaga: zasięg JaCoco jest dobry).

Uwaga: Używam Android Studio 2.0 oraz Kotlin 1.0.2

+0

Przez przypadek otrzymujesz wyjątek ArrayIndexOutOfBoundsException na wyjściu testowym? – daemontus

Odpowiedz

1

Gdy wplatany funkcja jest kompilowany, kompilator zasadniczo wkleja swoje ciało w miejscu połączenia (w miejscu wywołania funkcji). Oznacza to, że analiza pokrycia nie może stwierdzić, że jest to funkcja wstawiona, ponieważ tak naprawdę nie istnieje tam, gdzie ją zdefiniowano. Innymi słowy, to zachowanie jest naturalnym artefaktem tego, co to znaczy, że funkcja ma być wyróżniona.

+0

Nie ma powodu, aby zasięg innych byłby liczony jako zero, gdy używany jest inline. JaCoco jest w porządku, więc powyższe nie wyjaśnia w ogóle. – Elye