Dla projektu Android skonfigurowałem Retrofit 2.1.0 i OkHttp 3.4.1 z Dagger 2.6, jak pokazano w poniższym module Dagger. Mam zamiar obsługiwać wiele serwerów zapleczów przy użyciu kwalifikatorów @Named
.Jak obsługiwać wiele punktów końcowych za pomocą Dagger 2.0 podczas korzystania z MockWebServer
@Module
public class ApiModule {
private static final String GITHUB_QUALIFIER = "GitHub";
private static final String TWITTER_QUALIFIER = "Twitter";
@Provides
GitHubClient provideGitHubClient(@Named(GITHUB_QUALIFIER) Retrofit retrofit) { /* ... */ }
@Provides
TwitterClient provideTwitterClient(@Named(TWITTER_QUALIFIER) Retrofit retrofit) { /* ... */ }
@Named(GITHUB_QUALIFIER)
@Provides
@Singleton
HttpUrl provideGitHubBaseUrl() { /* ... */ }
@Named(TWITTER_QUALIFIER)
@Provides
@Singleton
HttpUrl provideTwitterBaseUrl() { /* ... */ }
@Named(GITHUB_QUALIFIER)
@Provides
@Singleton
Retrofit getGitHubRetrofit(@Named(GITHUB_QUALIFIER) HttpUrl httpUrl,
OkHttpClient okHttpClient) { /* ... */ }
@Named(TWITTER_QUALIFIER)
@Provides
@Singleton
Retrofit getTwitterRetrofit(@Named(TWITTER_QUALIFIER) HttpUrl httpUrl,
OkHttpClient okHttpClient) { /* ... */ }
private Retrofit getRetrofit(String baseUrl,
OkHttpClient okHttpClient) { /* ... */ }
@Provides
@Singleton
public OkHttpClient provideOkHttpClient() { /* ... */ }
}
Chcę użyć do testowania MockWebServer. Jednak nie mogę dowiedzieć się, w jaki sposób mogę przekazać w URL MockWebServer przy jednoczesnym wspieraniu wielu backendów:
// From a unit test
mockWebServer = new MockWebServer();
mockWebServer.start();
ApiModule apiModule = new ApiModule();
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
String url = mockWebServer.url("/").toString();
// Here I cannot pass the URL to Retrofit
Retrofit retrofit = apiModule.provideRetrofit(/* HERE */ okHttpClient);
gitHubClient = apiModule.provideGitHubClient(retrofit);