2017-03-15 7 views
3

私はAndroidプロジェクトの計測テストを実装しようとしました。私の主なプロジェクトでは、短剣と改造を使用して、私のモジュールから改造を提供しています。MockWebServerを改造したものとダガー

これは改造を提供し、私のモジュールです:

@Module 
public class NetModule { 

    @Provides 
    @Singleton 
    OkHttpClient.Builder provideOkHttpClientBuilder(){ 
     OkHttpClient.Builder okHttp = new OkHttpClient.Builder(); 

     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     NoCacheInterceptor noCacheInterceptor = new NoCacheInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 

     if (!okHttp.interceptors().contains(interceptor)) 
      okHttp.addInterceptor(interceptor); 

     if (!okHttp.interceptors().contains(noCacheInterceptor)) 
      okHttp.addInterceptor(noCacheInterceptor); 

     return okHttp; 
    } 

    @Provides 
    Retrofit provideRetrofit(OkHttpClient.Builder httpClient){ 
     return new Retrofit.Builder() 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .baseUrl(Constant.BASE_URL) 
       .client(httpClient.build()).build(); 
    } 

} 

はその後、私のandroidTestフォルダに、私は以下のようにMockWebServerと改造を提供するために、TestModuleを作成:

@Module 
public class TestNetModule { 
    private final MockWebServer mockWebServer; 
    public TestNetModule() { 
     mockWebServer = new MockWebServer(); 
    } 

    @Provides 
    @Singleton 
    MockWebServer providerMockWebServer() { 
     return new MockWebServer(); 
    } 

    @Provides 
    @Singleton 
    OkHttpClient.Builder provideOkHttpClientBuilder(){ 
     OkHttpClient.Builder okHttp = new OkHttpClient.Builder(); 

     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     NoCacheInterceptor noCacheInterceptor = new NoCacheInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 

     if (!okHttp.interceptors().contains(interceptor)) 
      okHttp.addInterceptor(interceptor); 

     if (!okHttp.interceptors().contains(noCacheInterceptor)) 
      okHttp.addInterceptor(noCacheInterceptor); 

     return okHttp; 
    } 

    @Provides 
    Retrofit.Builder provideRetrofitBuilder(OkHttpClient.Builder httpClient, MockWebServer mockWebServer){ 
     return new Retrofit.Builder() 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .baseUrl(mockWebServer.url("/").toString()) 
       .client(httpClient.build()).build(); 
    } 
} 

私は私のテストを実行したときに、私はいつもエラーandroid.os.NetworkOnMainThreadExceptionをコード.baseUrl(mockWebServer.url("/").toString())で得る。テストのための改造とダガーを備えた適切な実装MockWebServerはどのようにしていますか?

答えて

3

mockWebServer.url("/")を呼び出すと、メインスレッドで実行できない処理が開始されます。

私はそうのように、これを解決:

@Provides 
@Singleton 
MockWebServer providerMockWebServer() { 
    MockWebServer mockWebServer = new MockWebServer() 
    Thread thread = new Thread() { 
     @Override 
     public void run() { 
      try { 
       mockWebServer.start(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    thread.start(); 
    return mockWebServer; 
} 
関連する問題