MockWebServer не выполняет обратный вызов

Я пытаюсь протестировать наше приложение для Android с помощью MockWebService. Запрос, отправленный на сервер, получен правильно, однако ответ не был возвращен клиенту. Это происходит только при асинхронном выполнении запроса, при непосредственном использовании httpclient он работает нормально...

   protected void signIn(String macAddress) {
   RequestHandle requestHandle = NetTask.signIn(this, object, new TextHttpResponseHandler() {
        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            super.onFailure(statusCode, headers, responseString, throwable);
            Log.e("TAG","Login failed responseString="+responseString+",statusCode="+statusCode);
            ToastShowHelper.showSourceErrorToast(SignInActivity.this, statusCode, responseString);
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, String responseString) {
            super.onSuccess(statusCode, headers, responseString);
            Log.d("TAG", "Login succeed responseString=" + responseString + ",statusCode=" + statusCode);
            onSignInSuccess(responseString);
        }
}

Код, который мы тестируем, также очень прост:

@Test
public void TestSignIn() throws URISyntaxException, InterruptedException {
    MockWebServer server = new MockWebServer();
    server.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/json; charset=utf-8").setBody(requestBody));
    try {
        server.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
    baseUrl = server.url(testUrl);
    UrlUtil.setTestLeftUrl(mockHttpRequest.getLeftUrl());
    email.setText("[email protected]");
    password.setText("123456");
    signInActivity.signIn("mac_addr");
    assertEquals("{\"mac_address\":\"mac_addr\",\"email\":\"[email protected]\",\"from\":\"ANDROID\",\"password\":\"123456\",\"has_mac\":true}", mockHttpRequest.isTestUrl().getBody().readUtf8());

}

Любая идея или помощь ценим! Спасибо!


person Whispererli    schedule 03.05.2016    source источник


Ответы (1)


Я думаю, вам просто нужно дождаться асинхронного вызова, поэтому, возможно, используйте

Thread.sleep(3000) // 3 secs

перед утверждением.

person Nice Fontaine    schedule 21.03.2017