В моем тестовом примере 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 должен уловить его.
Я знаю, как я утверждаю, что исключение. Если вы скажете мне, что я не могу делать то, что хочу в своем вопросе с JUnit 3, и переход на JUnit 4 - это решение, это был бы возможный ответ. Но мой вопрос определенно не в том, как это сделать. – Terry
Извините, моя вина. Ваш способ проверки исключений является предпочтительным способом в JUnit 3. Есть хорошие альтернативы с JUnit 3, если вы используете Java 8, но я думаю, что вы не используете Java 8? –
Что вы имеете в виду: «Можете ли вы рассказать мне, как я могу иметь нулевое значение как действительное возвращаемое значение?». Если метод генерирует исключение, он ничего не возвращает. –