我在Android中有一个发送状态栏通知的类。我找不到一种方法来测试通知是否被发送,这使得编写任何有用的单元测试都非常困难。有人能解决这个问题吗?
prdp8dxp1#
也许这不是你要找的答案,但像往常一样,解决办法是:
这可以通过以下技术来简化:
j2qf4p5b2#
尝试通过扩展NotificationManager创建Mock对象并覆盖notify()方法。可以Assert覆盖的函数。在您的测试用例中,将Mock注入到主题Activity中,并使用Android JUnit Test运行测试。
notify()
u4dcyp6a3#
Robotium无法与通知栏交互。您只能使用一个应用程序。请查看Robotium的常见问题解答,其中提到:http://code.google.com/p/robotium/wiki/QuestionsAndAnswers
egdjgwm84#
UI Testing我想这就是你想要的。uiautomator。仅适用于Android 4.1或以上版本。您可能需要先运行示例代码。你可以写一段代码来执行下拉状态栏的操作,然后做你的事情。这只是UI测试,你不能用uiautomator测试你的数据。希望这能有所帮助。
yacmzcpb5#
您可以使用模拟器来进行此类测试,其中包含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),以检查在向Google FCM http端点发送多播消息后是否有活动的通知。
nzk0hqpo6#
通过在发送之前将通知详细信息存储在数据存储中,并在用户通过通知栏进入应用程序时标记为已确认,解决了类似情况。由于robotium受限于应用程序边界,因此无法访问系统数据,因此使用基于junit/jmockit的单元测试测试了行为。
wz8daaqr7#
检查通知监听器服务:当发布或删除新通知或更改其排名时,从系统接收调用的服务。https://developer.android.com/reference/android/service/notification/NotificationListenerService.html
2sbarzqh8#
只是为了保存别人一些时间:一个看起来应该检测通知但实际上没有检测到的东西是试图创建一个带有NO_CREATE标志的PendingIntent。由于尝试使用与现有通知相同的值创建PendingIntent,但使用NO_CREATE标志,应返回null,因此似乎可以告诉通知是否已经有一个PendingIntent。遗憾的是,这似乎并不可靠。
8条答案
按热度按时间prdp8dxp1#
也许这不是你要找的答案,但像往常一样,解决办法是:
这可以通过以下技术来简化:
j2qf4p5b2#
尝试通过扩展NotificationManager创建Mock对象并覆盖
notify()
方法。可以Assert覆盖的函数。在您的测试用例中,将Mock注入到主题Activity中,并使用Android JUnit Test运行测试。u4dcyp6a3#
Robotium无法与通知栏交互。您只能使用一个应用程序。请查看Robotium的常见问题解答,其中提到:http://code.google.com/p/robotium/wiki/QuestionsAndAnswers
egdjgwm84#
UI Testing
我想这就是你想要的。uiautomator。
仅适用于Android 4.1或以上版本。您可能需要先运行示例代码。
你可以写一段代码来执行下拉状态栏的操作,然后做你的事情。这只是UI测试,你不能用uiautomator测试你的数据。
希望这能有所帮助。
yacmzcpb5#
您可以使用模拟器来进行此类测试,其中包含Android Marshmallow(API 23)。
例如:
重要的部分是调用NotificationManager(mManager),以检查在向Google FCM http端点发送多播消息后是否有活动的通知。
nzk0hqpo6#
通过在发送之前将通知详细信息存储在数据存储中,并在用户通过通知栏进入应用程序时标记为已确认,解决了类似情况。由于robotium受限于应用程序边界,因此无法访问系统数据,因此使用基于junit/jmockit的单元测试测试了行为。
wz8daaqr7#
检查通知监听器服务:
当发布或删除新通知或更改其排名时,从系统接收调用的服务。
https://developer.android.com/reference/android/service/notification/NotificationListenerService.html
2sbarzqh8#
只是为了保存别人一些时间:一个看起来应该检测通知但实际上没有检测到的东西是试图创建一个带有NO_CREATE标志的PendingIntent。
由于尝试使用与现有通知相同的值创建PendingIntent,但使用NO_CREATE标志,应返回null,因此似乎可以告诉通知是否已经有一个PendingIntent。
遗憾的是,这似乎并不可靠。