MockWebServer不做回调

时间:2016-05-03 07:13:16

标签: android unit-testing asynchronous mockwebserver

我尝试使用MockWebService测试我们的Android应用。发送到服务器的请求被正确接收,但是,响应没有返回给客户端。这只发生在异步执行请求时,直接使用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("plapla@testemail.com");
    password.setText("123456");
    signInActivity.signIn("mac_addr");
    assertEquals("{\"mac_address\":\"mac_addr\",\"email\":\"plapla@testemail.com\",\"from\":\"ANDROID\",\"password\":\"123456\",\"has_mac\":true}", mockHttpRequest.isTestUrl().getBody().readUtf8());

}

任何想法或帮助欣赏!谢谢!

1 个答案:

答案 0 :(得分:0)

我猜你只需要等待异步调用,所以也许可以使用

Thread.sleep(3000) // 3 secs
在断言之前