Retrofit 2.0
を使用してユニットテストしようとしています。私はWebサーバーのセットアップを持っていますが、問題として、私はjson
というファイルを応答として渡します。説明するために、私のフォルダ構造は次のとおりです。MockWebserverおよびRetrofit 2.0
src->test->java->package_name->class_name.java
src->test->resources->list_success.json
私のユニットテスト:
@Before
public void setUp() throws Exception{
MockitoAnnotations.initMocks(this);
server = new MockWebServer();
serviceHelper = new ServiceHelper();
}
@Test
public void testEventBusIdPostedOnSuccessfulServiceCall() throws Exception {
server.start();
server.enqueue(new MockResponse().setResponseCode(200).setBody(getStringFromFile(RuntimeEnvironment.application, "list_success.json")));
MainActivity.URL = server.url("/").toString();
serviceHelper.getIndividualData("Store","7");
verify(eventBus).post(any());
}
@After
public void tearDown() throws Exception{
server.shutdown();
}
すべてが正常に動作します。非同期であるレトロフィットコールは、モックJSONでトリガーされます。ただし、コールバックは決して起動しません。私は実際のサービスの実装内でカウントダウンラッチを入れてみましたが、何も起こりません。
public void getIndividualData(String item, String number) {
Call<DataList> dataList = RestClient.get().getList(item, number);
dataList.enqueue(new Callback<DataList>() {
@Override
public void onResponse(Response<DataList> response, Retrofit retrofit) {
/*data persistence should take place before sending out the eventbus message.
Passing the response object directly for sample purpose. */
EventBus.getDefault().post(new IndividualItemEvent(response.body().Values));
// latch.countDown(); ---->might be needed for retrofit async unit testing
}
@Override
public void onFailure(Throwable t) {
Log.d("%%%%%", "retrofit failure");
// latch.countDown(); ---->might be needed for retrofit async unit testing
}
});
// try {
// latch.await();
// } catch (InterruptedException e) { ---->might be needed for retrofit async unit testing
// e.printStackTrace();
// }
ここに何か不足していますか?おかげさまで
からモックデータを作成するには、このLIBを使用することができ、「オットーバスイベント・メッセージを送信する」 - 私の知る限り、それはあなたが嘲笑しようとしている場合を除き、仕事に行くのではないですすべてそれも。 OttoにはAndroidが必要です。特に、あなたの 'getMainLooper()'エラーの原因かもしれません。 – CommonsWare
より大きな問題は、静的なJSONファイルを持っている間に、mockwebserverで改造をテストする方法の多くです。私は無視することができます静的なJSONの問題を回避しようとする中で、ottoバスエラーは副産物として終わりました。 – user2511882
"より大きな問題は、静的なJSONファイルを持っている間にmockwebserverを使って改造をテストする方法の多くです。私は地元のユニットテストを避けて、計装テストを使用します。ごめんなさい! – CommonsWare