Тестирование уведомлений с помощью модульных тестов

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

Из-за этого я попытался разбить его на вызов моего BroadcastReceiver и перехватить тот момент, когда я запускаю уведомление. Поэтому в этот момент я могу проверить, содержит ли уведомление все настройки, которые я ожидаю. Я должен надеяться, что это будет сделано так, как ожидалось 🙂

В моем build.gradle я добавил этот блок:

 testOptions { unitTests.returnDefaultValues = true } 

Здесь начинается моя проблема. Я создаю Intent и звоню получателю:

 @RunWith(MockitoJUnitRunner.class) public class NotificationTest { @Mock Context mMockContext; @Test public void firstTest() { NotificationManager manager = new NotificationManager(); manager.onReceive(mMockContext, new Intent(NotificationManager.MY_ACTION)); } } 

Этот код вылетает из-за NullPointerException потому что у меня есть эта красивая линия в моем BroadcastReceiver :

 switch(intent.getAction()) { 

Я могу себе представить, что здесь происходит. Издевательский API не создает реального Intent и мои данные исчезли. Как я могу протестировать сейчас свою реализацию уведомлений? Думаю, что PendingIntent который я хочу протестировать, не будет работать в эфире.

Что я могу сделать сейчас?

Мое решение на данный момент издевается над намерением:

 Intent action = spy(new Intent(NotificationManager.MY_ACTION)); doReturn(NotificationManager.MY_ACTION).when(action).getAction(); 

Однако это всего лишь обходной путь. Позже я столкнулся с проблемой, что класс Notification.Builder() возвращает только нули в шаблоне построителя, так что это вообще не исправит.