#android #unit-testing #junit #tdd
#Android #модульное тестирование #юнит #tdd
Вопрос:
Каков наилучший подход к написанию теста, когда его результат зависит от целевого устройства?
Например, допустим, у меня есть приложение для Android, единственной функциональностью которого является отображение высоты дисплея в пикселях. Как я могу это проверить, если результат будет меняться для каждого отдельного типа устройства?
Прямо сейчас моя идея состояла бы в том, чтобы протестировать программу с тремя или четырьмя различными конфигурациями. Поскольку я знаю, каким должен быть результат для этих тестов, мне нужно просто сравнить ожидаемое значение с фактическим значением для каждого устройства.
Однако какова правильная структура для такого теста? Нужно ли мне создавать тестовый класс для каждого устройства? Как я могу запускать некоторые тесты только для определенных конфигураций тестов? (Например, если тесты выполняются на Nexus, выполните тест A, но если тесты выполняются на Samsung, выполните тест B).
Ответ №1:
Что касается вашего первого вопроса, если ваше приложение, например, отображает высоту экрана, получите его с помощью разных методов и сравните результаты. Вы можете использовать adb shell wm size
или получить скриншот устройства, а затем получить размер изображения.
И для вас второй вопрос: если вы создаете тесты, применимые только к устройству, вы можете использовать JUnit4 Assume, который представляет собой набор методов, полезных для формулирования предположений об условиях, в которых тест имеет смысл.
Ошибочное допущение не означает, что код поврежден, но что тест не дает никакой полезной информации, тогда вы можете использовать его в начале своих тестов
@Test
public final void testSomething() throws IOException {
assumeThat(Build.MANUFACTURER, is(equalTo("samsung")));
// your test here
...
}