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 } 

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

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