Java
Android
Kotlin
Espresso

EspressoテストをKotlin化したらThe @Rule 'mActivityRule' must be public.エラーが出るのでその対策


やりたいこと

EspressoテストのKotlin化

Convert Java File To Kotlin Fileを実行した


困ったこと

テストを実行すると以下の例外が発生する

org.junit.internal.runners.rules.ValidationError: The @Rule 'mActivityRule' must be public.


原因

Kotlinで宣言したプロパティはJava側から見るとgetterとsetterがあるのみで、publicなフィールドとしてアクセスできないからである。


解決方法

Kotlinで書いたクラスのフィールドにJavaからアクセスしたい場合は以下のように@JvmFieldアノテーションをつける

@Rule @JvmField

var mActivityRule = ActivityTestRule(HogeActivity::class.java)


終わりに

Kotlinの言語仕様を知らないからこんなことになるので、基本的なところは学習する必要がある。

何かの参考になれば幸いです。


参考になったサイト

https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html

https://proandroiddev.com/fix-kotlin-and-new-activitytestrule-the-rule-must-be-public-f0c5c583a865