Почему нет тестовых приборов для широкострационного движения?
-
28-09-2019 - |
Вопрос
Может быть, я что-то скучаю. Я хочу написать тестовые случаи для широководства; В частности, именно для приема события Boot_Completed и установка тревоги для другого приемника для обработки позже; Похоже, это не устанавливает его должным образом, но смысл в том, что у меня нет очевидного способа проверить его. Я не могу прикрепить отладчик и ждать boot_completed, и я не могу отправить фальшивую вещаю boot_completed.
Почему классы инструментарии для активности, обслуживания и провайдера, но не BroadCastreceiver? Любой совет для тестирования этого?
Решение
Нет ничего магического о жизненном цикле для широковедащего. Этого достаточно, чтобы проверить его с помощью AndroidTestcas. В тестовом случае создать свой широкозаконныйastereiver, создайте все, что вы хотите отправить, и вызовите onreceive, используя контекст, доступный из AndroidTestcas или некоторого контекста Mock.
Например
public class TestMyBroadcastReceiver extends AndroidTestCase {
public void testReceive() {
MyBroadcastReceiver r = new MyBroadcastReceiver();
Intent i = new Intent("MY_ACTION");
// TODO put extras
r.onReceive(getContext(), i);
// TODO query application state to verify results
}
}
Другие советы
Для большинства случаев я полностью согласен с https://stackoverflow.com/a/5181010/527016.
Однако есть случаи при продлении AndroidTestCase
не подходит (и может вызвать сюрпризы). В частности, если вы делаете более сложные тестирования интеграции и хотите проверить BroadcastReceiver
с фактическим Intent
отправлено системой. Основная причина в том, что onReceive
Метод в широковещательном приемнике работает на основной резьбе приложения, в то время как тесты в AndroidTestCase
Беги в другой поток. Это может вызвать проблемы, связанные с тестируемыми резьбами в коде, который не был предназначен для запуска по нескольким потокам.
Решение для этого является подкласс вашего теста от InstrumentationTestCase
вместо этого и используйте @UiThreadTest
Аннотация, чтобы проверить тесты на той же ните, что и onReceive
метод.
Для получения дополнительной информации (и пример) см.: http://olafurhelgason.blogspot.com/2012/12/threading-and-andaandroid-integration.html.