在UITest中模拟推送通知

时间:2017-11-15 09:24:07

标签: ios xcode apple-push-notifications xctest

我们想在UITest中测试推送通知的接收(当应用程序处于活动状态时)。发送实际推送通知的goto解决方案听起来有点像矫枉过正(仅适用于真实设备):请参阅http://www.pixeldock.com/blog/testing-push-notifications-with-xcode-uitests/

我的问题是:是否可以(直接或间接)从(UI)didReceiveRemoteNotification调用UIAppicaltionDelegate的XCTestCase

2 个答案:

答案 0 :(得分:0)

您无法通过 UITest 调用应用程序代码中的功能。 UITests在一个单独的过程中运行,无法访问您应用的功能和方法。

来自Apple的文档:

  

UI测试与基本方式的单元测试不同。单元测试   使您能够在应用程序的范围内工作,并允许您锻炼   功能和方法,可以完全访问您的应用程序的变量和   州。 UI测试以与用户相同的方式练习应用程序的UI   无法访问您应用的内部方法,功能和   变量。这使您的测试能够以与用户相同的方式查看应用程序   确实暴露了用户遇到的UI问题。

可以在 UnitTest 中直接从测试中调用didReceiveRemoteNotification。我不知道您的应用如何处理推送通知,但是如果您可以使用可能是有效替代方案的单元测试来测试所需的结果。

答案 1 :(得分:0)

您可以在UITest中触发应用中的事件。我之前已经通过将按钮放到我的视图上来实现(限制是我必须将按钮添加到我想要发生事件的每个视图上)。

要确保只在UITesting时添加按钮,在setUp()函数中通过将元素附加到launchArguments数组来传递launchArguments。

launchArguments.append("push_notification_button")

要从应用内进行访问:

if ProcessInfo.processInfo.arguments.contains("push_notification_button") {
    // Add button
}