user3773337
user3773337

Reputation: 2378

Android Unit test with Volley

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

Upvotes: 3

Views: 3942

Answers (1)

Tlife
Tlife

Reputation: 71

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

Upvotes: 7

Related Questions