Выполнение тестов инструментария в эмуляторе и на физическом устройстве

#android #unit-testing #kotlin #asynchronous #testing

Вопрос:

У меня есть тест, который вызывает функцию с вызовом API, который ожидает ответа, у этой функции есть обработчик успеха и обработчик сбоев. Обычно я ожидал бы, что тест будет ждать обработчика успеха или обработчика ошибок перед завершением, но это не всегда так.

Когда я запускаю тест на эмуляторе (Pixel 4a API 30): Вызывается функция, и она ожидает ответа либо обработчика успеха, либо обработчика сбоя, как и ожидалось, а затем вызываемый соответствующий обработчик либо выполняет тест, либо завершает его с ошибкой.

Когда я запускаю тесты на физическом устройстве (Samsung Galaxy S7): Функция вызывается, но тест не ожидает обработчика успеха или сбоя, поэтому тест проходит успешно, потому что обработчики, которые решают, завершаются ли тесты неудачно или проходят, не доступны вовремя.

Если я переведу поток в спящий режим на 5 секунд, обработчики будут доступны, так что это вопрос асинхронного ожидания. Просто не знаю, почему он ждет обработчиков на эмуляторе, но на физическом устройстве этого не происходит.

Имейте в виду, что тест был проведен на @UiThreadTest

Комментарии:

1. Можете ли вы поделиться своим тестовым кодом?

2. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.