Как я могу написать автоматический тест для Android, если тест зависит от устройства?

#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
    ...
}