3

是否可以为我使用 Volley 进行网络请求的 android 应用程序编写单元测试。例如。我想为登录功能编写一个单元测试,在该功能中我发布一个带有用户凭据的 volley 请求,并在响应中检查有效的用户对象。有没有人做过类似的事情?请提供示例或参考。

这是我的登录方法:

    public void login() {
    try {
        JSONObject jsonRequest = new JSONObject();
        String emailString = email.getText().toString();
        jsonRequest.put("email", emailString);
        String passwordString = password.getText().toString();
        jsonRequest.put("password", passwordString);

        NetworkUtil.postLogin(new Listener<User>() {

            @Override
            public void onResponse(User response) {
                setUser(response);
                onUserSuccess();
            }
        }, new ErrorListener("postLogin") {

            @Override
            public void onErrorResponse(VolleyError error) {
                super.onErrorResponse(error);
                onUserError(error);
            }

        }, jsonRequest);
    } catch (Exception e) {
    }

我的 postLogin 方法类似于添加一个凌空请求:

    public static void postLogin(Listener<User> listener, ErrorListener errorListener,
        JSONObject jsonRequest) {
    VolleySingleton
            .getInstance()
            .getRequestQueue()
            .add(new GsonRequest<User>(getUrl("login"), "user_profile", User.class, jsonRequest, Method.POST,
                    listener, errorListener));
}
4

1 回答 1

7

建议您使用CountDownLatch等待截击响应,以便您可以进行测试。否则,您的测试将在响应之前结束。

在您的单元测试类中使用:

final CountDownLatch signal = new CountDownLatch(1);

/** your code here wait for response**/

signal.await();

/** your code here**/

在 on response 方法中,您应该添加 signal.countDown();

这是参考链接https://github.com/loopj/android-async-http/issues/173

于 2014-09-04T04:48:30.433 回答