Android JUnit Testing... Как ожидать исключения
Я пытаюсь написать несколько тестов, используя встроенную среду тестирования Android. Я столкнулся с проблемой с тестом, в котором ожидаю исключения. В JUnit аннотация для тестового метода будет:
@Test(expected = ArithmeticException.class)
Однако в android этот тест не выполняется с помощью исключения ArithmeticException.
Я понимаю, что реализация Android - это только подмножество JUnit 3 и даже не позволяет аннотировать @Test (должен быть @SmallTest, @MediumTest или @LargeTest, и ни один из них не позволяет "ожидать" =.. '), но это похоже на довольно значительный тест, и похоже, что рамки тестирования для Android будут серьезно отсутствовать, если у него не было этой функции.
Примечание. Я тестировал это, добавляя банку JUnit в проект и добавляя аннотации к моим методам тестирования. Для меня имеет смысл, почему аннотации будут полностью игнорироваться, потому что андроидная структура (бегун?) Не ищет эту аннотацию и просто игнорирует ее. В основном я просто ищу "правильный" способ сделать это в рамках.
Ответы
Ответ 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
}
также возможно.
Подробнее о настройке библиотеки поддержки тестирования см. в официальной документации .