1

私はIdea/Android-StudioのKotlin REPLが好きですが、Androidデベロッパーとしてスタブによく出ます!ここの問題。ユニットテストを書くときに私はこの問題を回避するためにunmockを使用しています。 Kotlin REPLプラグインに使用されているのと同じ方法を使用する方法はありますか?Androidクラスを使用したKotlin REPL unstub!ed

[image showing the problem[2]

答えて

0

すべてのAndroid(とされるjava.lang。*)のクラスは、Androidプロジェクト内のプレースホルダです。これは、アンドロイドはコンパイルされたコードを格納するために標準のJavaクラスファイルを使用しないため、コンピュータ上でこのコードを直接実行する方法がないためです。

アンドロイドクラスでREPLを使用することはできません。実際のデバイスやエミュレータにのみ存在します。

RobolectricのAndroid実装は、プロジェクトに依存するものとして追加することで、正確性を気にかけなくても使用できます。 実際の実装と衝突しないようにするには、REPL専用の別のモジュールを使用してください。

unmockで使用Robolecticの依存関係は次のとおりです。org.robolectric:android-all:7.1.0_r7-robolectric-0

+0

あなたはunmockを見ましたか?同じ方法をここで使用できない理由は何ですか?エミュレータ/デバイスは必要ありません – ligi

+0

プラグインはrobolectric(http://robolectric.org/)のAndroid実装を使用しているようです。使用されていない理由は、非公式であり、実際のアンドロイドデバイスとの動作が保証されていないためです。 – Kiskae

+0

私はここでの保証を気にしません - それはユニットテストで本当にうまく動作します - REPLで同じことが欲しいです – ligi

1

問題はKotlin REPLがIDEAでのAndroid自体の概念を持っていないKotlinのIDEAプラグインによって提供されていることであるが、唯一のクラスパスに何があるかを見てこの場合、あなたが言及した例外をスローするスタブを含むandroid.jarです。

テストでスタブから例外を削除するためのunmockまたは統合されたAndroidのサポートを使用すると、Gradleビルドにのみ影響するため、Android Moneの依存関係の末尾にあるhereを参照してください。

私が考えることのできる唯一の解決策は、Kotlin trackerで問題を開き、source code of the REPL function in the Kotlin pluginで掘り下げてプルリクエストを送信することです。

+0

アドバイスありがとうございます - 特にreplプラグインへのリンクsrc - appendinxと同様 - Romain Guyはチャットでlayoutlibの実装を使用することができます - 私は時間を投資するかどうかはまだ分かりません - https://xkcd.com/1319/ – ligi

関連する問題