У меня есть класс, который отправляет уведомление о состоянии в Android. Я не могу найти способ проверить, было ли отправлено уведомление или нет, что очень затрудняет запись любого полезного unit test.
У кого-нибудь есть решение для этого?
У меня есть класс, который отправляет уведомление о состоянии в Android. Я не могу найти способ проверить, было ли отправлено уведомление или нет, что очень затрудняет запись любого полезного unit test.
У кого-нибудь есть решение для этого?
Возможно, не ответ, который вы ищете, но, как обычно, это решение:
Это можно упростить по следующей технологии:
Попробуйте создать объект Mock, расширив NotificationManager и переопределив методы notify()
. Можно утверждать, что переопределенные функции. В тестовом случае (ых), введите Mock в предметную активность и запустите тесты с помощью Android JUnit Test.
Robotium не может взаимодействовать с панелью уведомлений. Вы ограничены одним приложением. Проверьте FAQ для robotium, есть упоминание об этом: http://code.google.com/p/robotium/wiki/QuestionsAndAnswers
Тестирование пользовательского интерфейса
Это то, что вы хотите, я думаю. Uiautomator.
Работает только на Android 4.1 или выше. Сначала вам нужно запустить пример кода.
Вы можете написать фрагмент кода, чтобы выполнить действие pull-down-status-bar, а затем делать свои вещи. Это только тестирование пользовательского интерфейса. Вы не можете проверить свои данные с помощью uiautomator.
Надеюсь, это поможет.
Решает подобную ситуацию, сохраняя детали уведомлений в хранилище данных перед отправкой и маркировкой как подтвержденные всякий раз, когда пользователь входит в приложение через панель уведомлений. Поскольку роботизм ограничен границами приложений, он не может получить доступ к системным данным, поэтому проверял поведение с использованием junit/jmockit на основе unit test.
Вы можете использовать эмулятор, только для этих тестов, с 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-сервера Google FCM.
Проверьте NotificationListenerService:
"Служба, которая принимает вызовы от системы при отправке или удалении новых уведомлений или изменении их ранжирования.
Просто, чтобы немного сохранить других: вещь, которая похожа на нее, должна обнаруживать уведомления, но не пытается создать PendingIntent с флагом NO_CREATE.
Поскольку попытки создания PendingIntent с теми же значениями, что и существующее уведомление, но с флагом NO_CREATE, должны возвращать значение null, казалось, что это скажет, имело ли уведомление одно или нет.
К сожалению, это не кажется надежным.