Тест проходит, даже когда AsyncTask не может получить - PullRequest
0 голосов
/ 25 августа 2018

Тест проходит, даже когда AsyncTask не может извлечь шутку (Пример - если бэкэнд отключен).

В методе doInBackground моего AsyncTask у меня есть-

catch (IOException e) {
            return e.getMessage();
        }

Таким образом, когда возникает ошибка и возникает исключение, AsyncTask возвращает строку, представляющую сообщение об ошибке.Следовательно, тест будет пройден, даже если AsyncTask не смог извлечь шутку, поскольку строка не равна нулю.

Исходный код проекта:

https://github.com/AhmedHamdan54/BuildItBigger2

Редактировать 1: Один друг сказал мне, что я могу решить, заставив оператор catch возвращать определенную строку, и тест должен убедиться, что она не возвращает эту строку для прохождения.Но я не знаю, как это сделать.

1 Ответ

0 голосов
/ 25 августа 2018

С вашего GitHub:

    @Test
    public void testDoInBackground() throws Exception {
        MainActivityFragment fragment = new MainActivityFragment();
        fragment.testFlag = true;
        new EndpointAsyncTask().execute(fragment);
        Thread.sleep(5000);
        assertTrue("Error: Fetched Joke = " + fragment.loadedJoke, fragment.loadedJoke != null);

    }

Это неправильный подход к тестированию AsyncTasks.Выполнение метода doInBackground() происходит в фоновом потоке.Завершение не гарантируется через 5 секунд.

Используйте CountDownLatch вместо приостановки потока.Подробности уточните в этом ответе: https://stackoverflow.com/a/3802487/2470550


Второе - ваш AsyncTask.Взгляните на эту часть:

    try {
        return myApiService.tellJoke().execute().getData();
    } catch (IOException e) {
        return e.getMessage();
    }
}

и

@Override
protected void onPostExecute(String result) {

  ....

  mainActivityFragment.loadedJoke = result; 
}

Обратите внимание, что AsyncTask возвращает результат, даже если выброшено IOException.Я думаю, что возвращение null вместо e.getMessage() в блоке catch решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...