Могу ли я тестировать уведомления в строке состояния, используя платформу тестирования Android? - PullRequest
33 голосов
/ 28 октября 2010

У меня есть класс, который отправляет уведомление в строке состояния в Android. Я не могу найти способ проверить, было ли отправлено уведомление или нет, что очень затрудняет написание какого-либо полезного модульного теста.

У кого-нибудь есть решение для этого?

Ответы [ 8 ]

5 голосов
/ 09 января 2012

Возможно, это не тот ответ, который вы ищете, но, как обычно, решение заключается в следующем:

  • Создание интерфейса, абстрагирующего функциональность уведомлений.
  • Создание реализации по умолчанию, которая делегируетсяAPI системных уведомлений.
  • При выполнении тестов замените (или украсьте) реализацию по умолчанию на фиктивную реализацию, которая поддерживает тестирование.

Это можно упростить с помощью следующей технологии:

  • Фреймворки внедрения зависимостей (например, RoboGuice) для упрощения выбора реализации.
  • Библиотека Mocking (например, EasyMock) для автоматизации создания фиктивных реализаций.
4 голосов
/ 01 апреля 2012

Попробуйте создать объект Mock, расширив NotificationManager и переопределив методы notify().Переопределенные функции могут быть утверждены.В ваших тестовых примерах вставьте макет в предметное задание и запустите тесты с помощью Android JUnit Test.

2 голосов
/ 05 января 2013

Тестирование пользовательского интерфейса

Это то, что вы хотите, я думаю. Уиавтомат.

Работает только на Android 4.1 или выше. Возможно, вам нужно сначала запустить пример кода.

Вы можете написать кусок кода для выполнения действия раскрывающейся строки состояния, а затем выполнять свои действия. Это только тестирование пользовательского интерфейса. Вы не можете проверить свои данные с помощью uiautomator.

Надеюсь, это поможет.

2 голосов
/ 07 апреля 2011

Robotium не может взаимодействовать с панелью уведомлений.Вы ограничены одним приложением.Проверьте FAQ по robotium, есть упоминание об этом: http://code.google.com/p/robotium/wiki/QuestionsAndAnswers

1 голос
/ 08 июня 2016

Вы можете использовать эмулятор, только для подобных тестов, с Android Marshmallow (api 23).

Например:

 public void testCheckNotification_2() throws IOException, InterruptedException, GcmException
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        GcmResponse gcmResponse = endPointImp.sendGcmMulticastRequestImp(getGcmMultiRequest());
        assertThat(gcmResponse.getSuccess(), is(1));
        Thread.sleep(2000);
        assertThat(mManager.getActiveNotifications().length, is(1));
        StatusBarNotification barNotification = mManager.getActiveNotifications()[0];
        assertThat(barNotification.getId(), is(INCIDENCIA.getTitleRsc()));

        // We check the pending intent.
        PendingIntent pendingIntent = barNotification.getNotification().contentIntent;
        assertThat(pendingIntent.getCreatorPackage(), is(GcmRequest.PACKAGE_DIDEKINDROID));
    }
}

Важной частью является вызов NotificationManager (mManager), чтобы проверить наличие активных уведомлений после отправки многоадресного сообщения в конечную точку http FCM Google.

1 голос
/ 08 февраля 2012

Решил подобную ситуацию, сохранив детали уведомлений в хранилище данных перед отправкой и отметив их как подтвержденные, когда пользователь входит в приложение через панель уведомлений.Поскольку robotium ограничен границами приложения, он не может получить доступ к системным данным, поэтому протестировал поведение с помощью модульного теста на основе junit / jmockit.

0 голосов
/ 07 сентября 2015

Check NotificationListenerService:

"Служба, которая получает вызовы от системы, когда новые уведомления публикуются или удаляются, или их рейтинг изменяется."

https://developer.android.com/reference/android/service/notification/NotificationListenerService.html

0 голосов
/ 12 декабря 2013

Просто чтобы сэкономить время другим: вещь, которая выглядит так, как будто она должна обнаруживать уведомления, но не делает этого, пытается создать PendingIntent с флагом NO_CREATE.

Так как пытается создать PendingIntent сте же значения, что и в существующем уведомлении, но с флагом NO_CREATE должно возвращаться значение null. Похоже, это будет указывать, было ли уже уведомление в уведомлении или нет.*

...