Java 我可以使用Android';什么是测试框架?
我有一个类在Android中发送状态栏通知。我找不到测试通知是否被发送的方法,这使得编写任何有用的单元测试都非常困难Java 我可以使用Android';什么是测试框架?,java,android,unit-testing,junit,android-notifications,Java,Android,Unit Testing,Junit,Android Notifications,我有一个类在Android中发送状态栏通知。我找不到测试通知是否被发送的方法,这使得编写任何有用的单元测试都非常困难 有人对此有解决方案吗?Robotium无法与通知栏交互。您只能使用一个应用程序。查看robotium的常见问题,其中提到: 也许不是你想要的答案,但通常的解决办法是: 创建一个抽象通知功能的接口 创建委派给系统通知API的默认实现 运行测试时,使用支持测试的模拟实现替换(或修饰)默认实现 这可以通过以下技术简化: 依赖注入框架(如RoboGuice)简化了实现的选择 模拟库
有人对此有解决方案吗?Robotium无法与通知栏交互。您只能使用一个应用程序。查看robotium的常见问题,其中提到:
也许不是你想要的答案,但通常的解决办法是:
- 创建一个抽象通知功能的接口
- 创建委派给系统通知API的默认实现
- 运行测试时,使用支持测试的模拟实现替换(或修饰)默认实现
- 依赖注入框架(如RoboGuice)简化了实现的选择
- 模拟库(如EasyMock)自动创建模拟实现
由于robotium仅限于应用程序边界,它无法访问系统数据,因此使用基于junit/jmockit的单元测试来测试行为。尝试通过扩展和覆盖
notify()
方法来创建模拟对象。可以断言重写的函数。在您的测试用例中,将模拟注入主题活动,并使用Android JUnit test运行测试。
我想这就是你想要的。机器人
仅适用于Android 4.1或更高版本。您可能需要先运行示例代码
您可以编写一段代码来执行下拉状态栏操作,然后执行您的操作。这只是UI测试。无法使用uiautomator测试数据
希望这会有所帮助。只是为了给其他人节省一些时间:一个看起来应该能检测到通知但却不能检测到的东西,正在尝试创建一个带有NO_create标志的PendingEvent 由于尝试使用与现有通知相同的值创建PendingEvent,但不使用NO_create标志,应该返回null,因此似乎可以判断通知是否已经有一个PendingEvent
遗憾的是,这似乎不可靠。请查看NotificationListenerService: 在发布或删除新通知或更改其排名时接收系统呼叫的服务
您可以使用仿真器,仅用于此类测试,使用Android棉花糖(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端点发送多播消息后检查它是否有活动通知。有一个名为robotium的测试框架,但我不知道它是否支持通知。但是,如果标准junit库不支持它,您可以在那里进行检查。