2016-07-02 11 views
3

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(); 
//  } 

ここに何か不足していますか?おかげさまで

+0

からモックデータを作成するには、このLIBを使用することができ、「オットーバスイベント・メッセージを送信する」 - 私の知る限り、それはあなたが嘲笑しようとしている場合を除き、仕事に行くのではないですすべてそれも。 OttoにはAndroidが必要です。特に、あなたの 'getMainLooper()'エラーの原因かもしれません。 – CommonsWare

+0

より大きな問題は、静的なJSONファイルを持っている間に、mockwebserverで改造をテストする方法の多くです。私は無視することができます静的なJSONの問題を回避しようとする中で、ottoバスエラーは副産物として終わりました。 – user2511882

+0

"より大きな問題は、静的なJSONファイルを持っている間にmockwebserverを使って改造をテストする方法の多くです。私は地元のユニットテストを避けて、計装テストを使用します。ごめんなさい! – CommonsWare

答えて

関連する問題