実際には、Context
が必要なため、API呼び出しの応答を取得する必要があります。
更新
バージョン1.xおよび2.xに使用します。
Robolectric.application;
バージョン3.xの場合:
RuntimeEnvironment.application;
使用できます
RuntimeEnvironment.application
これを使って:
Robolectric.application
追加
testImplementation "androidx.test:core-ktx:${deps.testrunner}"
そして使用:
private val app = ApplicationProvider.getApplicationContext()
アプリケーションコンテキストを取得するには、以下を実行する必要があります。
2019年現在の最新のRobolectric 4.3について `
ShadowApplication.getInstance()
`および
Roboletric.application
両方とも廃止されました。だから私は使用しています
Context context = RuntimeEnvironment.systemContext;
コンテキストを取得します。
リリース4.0-alpha- の7月21日、 削除ShadowApplication.getApplicationContext()
。 RuntimeEnvironment.application.getApplicationContext()
アノテーションが付けられたテストには、 @RunWith(RobolectricTestRunner::class)
を使用します。
余談ですが、彼らの current guide には以下を使用して文字列リソースを取得する例があります:
final Context context = RuntimeEnvironment.application;
( RuntimeEnvironment
および ShadowApplication
のjavadocは現在、非アルファ3.xリリースを反映していることに注意してください。)
これはRobolectric 3.5.1で動作します:ShadowApplication.getInstance().applicationContext
@EugenMartynovと@rdsの回答に同意します....
簡単な例は、Volley-Marshmallow-Releaseにあります。
networkImageViewTest.Javaで
// mNIV = new NetworkImageView(Robolectric.application); mNIV = new NetworkImageView(RuntimeEnvironment.application);
ボレーリンクが利用可能 https://Android.googlesource.com/platform/frameworks/volley/+/Marshmallow-release
Android studio asのvolleyモジュールに依存関係を追加する必要があります。
dependencies { testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.robolectric:robolectric:3.1.2' }
わかりましたので、私は他の多くの人が以前にこの答えを言っていて、すでに時代遅れかもしれないことを知っています
when(mockApplication.getApplicationContext()).thenReturn(RuntimeEnvironment.application);
when(mockApplication.getFilesDir()).thenReturn(RuntimeEnvironment.application.getFilesDir());
sharedPref = RuntimeEnvironment.application.getSharedPreferences(KEY_MY_PREF, Context.MODE_PRIVATE);
sut = new BundleManagerImpl(mockApplication,
processHtmlBundle, resultListener, sharedPref);
When()部分がsut初期化の後だったので、nullになりました。あなたの一部を助けるかもしれません。
また、私は持っています
@RunWith(CustomRobolectricTestRunner.class)
@Config(constants = BuildConfig.class)
クラスの始めに
また
when(mockApplication.getApplicationContext()).thenReturn(RuntimeEnvironment.application.getApplicationContext()); works
あなたの場合、私はあなたが実際にテストしているものに注意する必要があると思います。 ntestable codeまたは一見テスト不可能なコードの問題に遭遇することは、コードをリファクタリングする必要があることを示す兆候です。
API呼び出し応答の場合、API呼び出し自体をテストしたくない場合があります。任意のWebサービスから情報を送受信できるかどうかをテストする必要はないかもしれませんが、コード予想されるマナーで応答を処理および処理します。
その場合、テストしようとしているコードをリファクタリングする方が良いかもしれません。単純なString
を受け入れる別のクラスへの応答解析/処理を分割し、サンプル文字列応答を注入することでテストそのクラスでを実行します。
これは多かれ少なかれ単一の責任と依存関係の逆転([〜#〜] s [〜#〜]のアイデアに従っています。 および[〜#〜] d [〜#〜]in [〜#〜] solid [〜#〜] )
_Robolectric.application
_を直接使用する代わりに、Robolectric.getShadowApplication()
を使用する方が安全です。
最初に以下を_build.gradle
_に追加します。
_testImplementation 'androidx.test:core:1.2.0'
_
次に使用します:
ApplicationProvider.getApplicationContext() as Application