私のコードがRetrofitを使用してAPIからデータを正しくダウンロードしていることを確認し、それらをRecyclerViewに表示するかどうかをテストしたいと思います。これを行うために、私は、API(this solutionに基づか)を皮肉っインターセプタを作成し、(Robolectric使用して)テスト作成:RobolectricとRetrofit - 応答待ち
@Test
public void listLoadedCorrectlyTest() {
MyListFragment myListFragment = new MyListFragment();
Bundle args = new Bundle();
FragmentTestUtil.startFragment(myListFragment);
Robolectric.flushForegroundThreadScheduler();
JSONArray responseArray = new JSONArray();
try {
responseArray = new JSONArray(ApiInterceptor.MOCK_RESPONSE);
} catch (JSONException e) {
Log.e("JSON", e.getMessage());
}
int adapterItemCount = ((RecyclerView) myListFragment.getView()
.findViewById(R.id.rv_fruits)).getAdapter().getItemCount();
assertThat(adapterItemCount).isEqualTo(responseArray.length());
}
問題はテストが時々合格し、時には失敗したということですが。私はコードをデバッグしました。これは、MyListFragment
のデータが、Retrofitのenqueue()
メソッドを使用してrv_fruits
RecyclerView
にロードされているためです。データがRecyclerView
にロードされた後にアサーションがチェックされるように、どのようにRetrofitコールバックを待つことができますか?
は、あなたのフラグメントのコードを表示することができますか?あなたはそこでネットワーキングを模倣できますか? –