Für ein Android-Projekt habe ich Retrofit 2.1.0 und OkHttp 3.4.1 mit Dagger 2.6 konfiguriert, wie im folgenden Dagger-Modul gezeigt. Ich ziele darauf ab, mehrere Backends mit @Named
Qualifiern zu unterstützen.So unterstützen Sie mehrere Endpunkte mit Dagger 2.0 bei Verwendung von 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() { /* ... */ }
}
Ich möchte MockWebServer zum Testen verwenden. Allerdings kann ich nicht herausfinden, wie ich in der URL der MockWebServer, während zur gleichen Zeit der Unterstützung mehrerer Backends passieren kann:
// 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);