Ich führe zuerst einen Mocked-Login-Test aus, der Statuscode 400 zurückgibt, gefolgt von einem zweiten Test, der sich unter Verwendung eines echten Serviceanrufs anmeldet. Die Tests sind unten:Sie können Anrufe für echte Server nicht testen, nachdem Sie mockwebserver auf Android verspottet haben?
@Test
public void mock() throws IOException, InterruptedException {
MockWebServer server = new MockWebServer();
server.enqueue(new MockResponse().setResponseCode(400));
server.start();
NetworkServiceHelper.init(String.valueOf(server.url("/"))); // Change retrofit baseUrl to localhost
loginWithoutWaiting(username, password);
server.shutdown();
}
@Test
public void real() {
NetworkServiceHelper.init(NetworkServiceHelper.DEFAULT_URL); // Change retrofit baseUrl to a real url
loginWithoutWaiting(username, password);
}
Der echte Dienst wird nicht aufgerufen. Die Meldung EditText Fehler sagt
Authentifizierung nicht möglich:/verbinden konnte nicht localhost 127.0.0.1: 50162
Hier ist die NetworkServiceHelper.init() Funktion, die Retrofit-Instanz initialisiert:
public static synchronized void init(String serverUrl) {
// Override the GSON date format.
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.create();
// We want to make the network calls asynchronous, so use createWithScheduler()
RxJavaCallAdapterFactory rxAdapter = RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());
// Finally, build the Retrofit client.
retrofit = new Retrofit.Builder()
.baseUrl(serverUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(rxAdapter)
.client(buildClient())
.build();
}