Reputation: 2378
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
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