Intereting Posts
Каковы преимущества языка программирования Kotlin? Как узнать, нажата ли кнопка «Готово» в ActionMode Android AudioRecord против MediaRecorder для записи аудио Как удалить границу только с одной стороны элемента? Является ли класс «Globals», в котором хранятся статические переменные в Android? Жизненный цикл активности Android: onStart () -> onStop () возможно? Android Firebase – «onDataChange» и «onCancelled» не вызывается без подключения к Интернету Работа с Enums в android LayerDrawable для растрового изображения Как протестировать мультитач в Android-эмуляторе Элементы, которые не отображаются в ActionBar с showAsAction = "always" OnCreate () вызывается при повторном открытии из недавней задачи после изменения настроек разрешения Как иметь более широкую прокрутку изображения в фоновом режиме Имитация гибели активности в Android Android.os.FileUriExposedException: файл: ///storage/emulated/0/test.txt выставляется вне приложения через Intent.getData ()

Android JUnit Testing … Как ожидать исключения

Я пытаюсь написать некоторые тесты, используя встроенную платформу тестирования Android Junit. У меня возникает проблема с тестом, в котором я ожидаю, что будет выбрано исключение. В JUnit аннотация для метода тестирования будет:

@Test(expected = ArithmeticException.class)

Однако в android этот тест завершился неудачей с помощью исключения ArithmeticException.

Я понимаю, что реализация Android – это только подмножество JUnit 3 и даже не позволяет аннотировать @Test (должен быть @SmallTest, @MediumTest или @LargeTest, и ни один из них не позволяет использовать параметр «expected = ..») , Но это похоже на довольно значительный тест, и похоже, что рамки тестирования Android не будут иметь серьезных недостатков, если бы у этой функции не было этой функции.

Примечание. Я проверил это, добавив банку JUnit в проект и добавив аннотации к моим методам тестирования. Для меня имеет смысл, почему аннотации будут полностью игнорироваться, потому что андроидная структура (runner?) Не ищет эту аннотацию и просто игнорирует ее. В принципе, я просто ищу «правильный» способ сделать это в рамках.

Solutions Collecting From Web of "Android JUnit Testing … Как ожидать исключения"

Стандартным значком junit 3 для такого рода тестов было:

 public void testThatMethodThrowsException() { try { doSomethingThatShouldThrow(); Assert.fail("Should have thrown Arithmetic exception"); } catch(ArithmeticException e) { //success } } 

Теперь JUnit4 доступен через Android SDK (см. Андроид-тест-комплект )

Обновление : теперь это официально на d.android.com :

AndroidJUnitRunner – это новый беспроигрышный тестовый бегун для Android, который является частью тестовой библиотеки Android Support и может быть загружен через репозиторий поддержки Android. Новый бегун содержит все улучшения GoogleInstrumentationTestRunner и добавляет больше возможностей:

  • Поддержка JUnit4
  • Инструментальный реестр для доступа к инструментам, контексту и связям
  • Тест-фильтры @SdkSupress и @RequiresDevice
  • Время ожидания теста
  • Облицовка тестов
  • Поддержка RunListener для запуска жизненного цикла тестового запуска
  • Механизм мониторинга активности ActivityLifecycleMonitorRegistry

Итак, стиль тестирования исключения JUnit4 с использованием ожидаемой аннотации:

 @Test(expected= IndexOutOfBoundsException.class) public void empty() { new ArrayList<Object>().get(0); } 

Или ожидаемых правил исключения:

 @Rule public ExpectedException thrown = ExpectedException.none(); @Test public void shouldTestExceptionMessage() throws IndexOutOfBoundsException { List<Object> list = new ArrayList<Object>(); thrown.expect(IndexOutOfBoundsException.class); thrown.expectMessage("Index: 0, Size: 0"); list.get(0); // execution will never get past this line } 

Также возможно.

Более подробную информацию о настройке библиотеки поддержки тестирования см. В официальной документации .