Модульный тест Android с 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));
}

person user3773337    schedule 25.06.2014    source источник
comment
Пожалуйста, поддержите свой вопрос фрагментом кода или результатом вашего исследования. см. Как спросить   -  person pushpraj    schedule 25.06.2014
comment
Теперь, как я могу добавить модульный тест для проверки этой функциональности, где я могу проверить, является ли пользовательский объект, который я получаю в своем onResponse, действительным объектом с правильными учетными данными.   -  person user3773337    schedule 25.06.2014
comment
Кроме того: если ваш тестируемый код зависит от другого (реального) сервиса, то это не модульный тест. Интеграция стала фактором в этом тесте.   -  person Paul Hicks    schedule 25.06.2014
comment
Итак, могу ли я написать интеграционный тест с инструментальной тестовой средой Android? Если да, то приведите пример. Если нет, какие другие фреймворки я могу использовать для решения этой проблемы.   -  person user3773337    schedule 25.06.2014


Ответы (1)


Предлагаем вам использовать CountDownLatch для ожидания ответа залпа, чтобы вы могли выполнить тест. В противном случае ваш тест закончится до ответа.

В вашем классе модульного тестирования с использованием:

final CountDownLatch signal = new CountDownLatch(1);

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

signal.await();

/** your code here**/

В методе ответа вы должны добавить signal.countDown();

вот справочная ссылка https://github.com/loopj/android-async-http/issues/173

person Tlife    schedule 04.09.2014