Android Unit test with Volley

余生长醉 提交于 2019-12-07 14:18:23

问题


Is it possible to write a unit test for my android application where I use Volley for network request. For Eg. I want to write a unit test for a log in feature where in I post a volley request with users credentials and check for a valid user Object in the response. Has anyone done anything similar? Kindly provide examples or references.

This is my login method:

    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) {
    }

And my postLogin method would be something like adding a volley request:

    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));
}

回答1:


Suggest you using CountDownLatch to await the volley response so that you can do the test. Otherwise your test will end before the response.

In your unit test class using:

final CountDownLatch signal = new CountDownLatch(1);

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

signal.await();

/** your code here**/

In the on response method you should add signal.countDown();

here is the reference link https://github.com/loopj/android-async-http/issues/173



来源:https://stackoverflow.com/questions/24399423/android-unit-test-with-volley

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!