2016-05-24 10 views
9

を報告するのIntelliJ IDEAカバレッジを引き起こし、私はカバレッジとそれを実行しKotlinのinlineキーワード0%

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) 
} 

以下のように私は非常に簡単なテスト関数を作成した...テストカバレッジ番号は0%です。しかし、キーワードinlineを削除すると、テストカバレッジ番号が表示されます。

これはKotlinの問題かAndroid IntelliJ IDEAカバレッジの問題ですか? (注:JaCocoのカバレッジは良いです)。

注:私は、Android Studioの2.0とKotlin 1.0.2

+0

万が一、テスト出力にArrayIndexOutOfBoundsExceptionが発生しましたか? – daemontus

答えて

1

インライン関数がコンパイルされると、コンパイラは、本質的に(関数呼び出しの代わりに)呼び出しサイトにその本体を貼り付けを使用しています。つまり、カバレッジ分析では、定義した場所には実際に存在しないため、インライン関数であることがわかりません。言い換えれば、この振る舞いは、関数がインライン化されることを意味するものの自然な結果です。

+0

インラインを使用すると、他の人のカバレッジがすべて0にカウントされる理由はありません。 JaCocoは大丈夫ですので、上記は全く説明しません。 – Elye