Я написал приложение реального времени для Android, которое получает сотни входных событий в секунду и выдает несколько выходных событий в секунду. Входные события управляют конечными автоматами для создания выходных событий. Я записываю как входные, так и выходные события в файл для каждого запуска. Я хочу использовать файлы прогонов, которые я считаю допустимыми для регрессионного тестирования. Я передам записанные входные события в систему и буду искать ожидаемые выходные события.
Моя система получает события через цикл/обработчик и использует таймеры, но в остальном она не зависит от Android API, за исключением android.util.log
для целей отладки, которые я могу легко обернуть.
Какой настольный фреймворк предоставит мне необходимые мне API? Будет ли достаточно теста JUnit? Должен ли это быть инструментальный тест? Мне действительно нужно запускать какую-то мокер-библиотеку? Это мое первое приложение для Android, и я все еще не освоился.
В идеале я бы написал инструмент командной строки на Java, чтобы я мог изменять параметры, управляющие тестированием. Я сомневаюсь, что тип тестирования, который я имею в виду, подходит для какой-либо универсальной тестовой среды, поскольку требуется некоторый интеллект, чтобы решить, когда пытаться сопоставить фактические результаты с ожидаемыми, а когда остановить выполнение теста. Я подозреваю, что просто ищу подходящие настольные библиотеки.
Я думаю, что вижу, как написать еще одно приложение для Android, которое бы выполняло эту работу, но это выглядит намного сложнее, чем делать это из оболочки, и к тому же это было бы намного менее удобно в использовании. Мой план резервного копирования состоит в том, чтобы протестировать мою систему ниже API петлителя (общедоступный API моей библиотеки) с использованием обычного обмена сообщениями потока Java. (Я хочу передавать события в систему в их исходное время.)
Обновление: когда я искал ответ, стало ясно, что я мог бы написать тест JUnit, который запускает все мои тесты в реальном времени, но меня беспокоят жалобы на медленную эмуляцию. Время имеет решающее значение во время этих испытаний. С другой стороны, настольный компьютер может запускать фоновые процессы, которые мешают синхронизации, поэтому, возможно, мне придется создать тестовую программу, которая запускается на устройстве. Надеюсь на совет...
android.os.HandlerThread
, чтобы я мог заглушить этот класс, а не цикл, последний из которых должен каким-то образом подвешивать данные в любом потоке, из которого он запускается. Я реорганизую код для этого сейчас. - person Joe Lapp   schedule 17.01.2017