Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

やりたいこと

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

Shotaro_Mori_
Flutterを使ってアプリを開発しています。 Android(Java、Kotlin)10年やってます。 iOS(Swift)も2年ほど。 現在はFlutterでアプリを開発 Fastlane1年生 FirebaseDistributionに使ってます ガントチャートとWBSも得意です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away