1

В моем тестовом примере Android JUnit, LoaderTestCase, я хочу проверить, выбрал ли мой загрузчик исключение или возвращает null. Я вижу, что в тесте бросается NullPointerException, и тест прерывается.Тестирование на исключение с LoaderTestCase

Я пытаюсь поймать исключение, как это:

try { 
    getLoaderResultSynchronously(new HistoricDataLoader(getContext(), url, username, password, 
     https, md5, station, stationMetaData, from, to)); 
    // Expected exception wasn't thrown: fail. 
    fail(); 
} catch (NullPointerException e) { 
    // Expected exception was thrown. Success. 
    Log.e(TAG, e.getMessage()); 
} 

Но вместо того, чтобы ловить исключение, LoaderTestCase в прерывании за исключением следующего:

java.lang.NullPointerException 
     at java.util.concurrent.ArrayBlockingQueue.checkNotNull(ArrayBlockingQueue.java:126) 
     at java.util.concurrent.ArrayBlockingQueue.offer(ArrayBlockingQueue.java:295) 
     at java.util.AbstractQueue.add(AbstractQueue.java:66) 
     at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:282) 
     at android.test.LoaderTestCase$2.onLoadComplete(LoaderTestCase.java:70) 
     at android.content.Loader.deliverResult(Loader.java:144) 
     at android.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:265) 
     at android.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:92) 
     at android.os.AsyncTask.finish(AsyncTask.java:632) 
     at android.os.AsyncTask.access$600(AsyncTask.java:177) 
     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5086) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 

Можете ли вы сказать мне, как я могут быть получены

  • Исключения для тестирования, которые выбрасываются в моем методе HistoricDataLoader#loadInBackground()
  • имеют нулевое значение как действительное возвращаемое значение?

Edit:

Я знаю, как проверить для исключения в JUnit 4. Прямо сейчас я делаю мои Android тесты с JUnit 3, следовательно, я ловлю их, как показано в коде. Если ваш ответ заключается в том, что я должен использовать JUnit 4 вместо JUnit 3, объясните, почему это должно иметь значение. Исключение выбрано и прервано тест внутри метода getLoaderResultSynchronously(). Он не пропускает вызывающую цепочку, поэтому я не вижу, как JUnit 4 должен уловить его.

+0

Я знаю, как я утверждаю, что исключение. Если вы скажете мне, что я не могу делать то, что хочу в своем вопросе с JUnit 3, и переход на JUnit 4 - это решение, это был бы возможный ответ. Но мой вопрос определенно не в том, как это сделать. – Terry

+0

Извините, моя вина. Ваш способ проверки исключений является предпочтительным способом в JUnit 3. Есть хорошие альтернативы с JUnit 3, если вы используете Java 8, но я думаю, что вы не используете Java 8? –

+0

Что вы имеете в виду: «Можете ли вы рассказать мне, как я могу иметь нулевое значение как действительное возвращаемое значение?». Если метод генерирует исключение, он ничего не возвращает. –

ответ

0

В JUnit 4 можно ожидать исключения с помощью аннотаций, ваш код может выглядеть примерно так:

@Test(expected=NullPointerException.class) 
    public void loaderNpe() { 
     getLoaderResultSynchronously(new HistoricDataLoader(getContext(), url, username, password,vhttps, md5, station, stationMetaData, from, to)); 
    } 
Смежные вопросы