Почему нет тестовых приборов для широкострационного движения?

StackOverflow https://stackoverflow.com/questions/4073982

Вопрос

Может быть, я что-то скучаю. Я хочу написать тестовые случаи для широководства; В частности, именно для приема события 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top