Подтвердить что ты не робот

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

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

@Test(expected = ArithmeticException.class)

Однако в android этот тест не выполняется с помощью исключения ArithmeticException.

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Теперь JUnit4 доступен через Android SDK (см. android-test-kit)

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

AndroidJUnitRunner - это новый беспроигрышный тестовый бегун для Android, который является частью тестовой библиотеки поддержки Android и может быть загружается через репозиторий поддержки 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
}

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

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