【发布时间】:2016-07-28 06:36:12
【问题描述】:
我正在构建一个 iOS 框架,用于收集有关 iOS 应用程序中各种事件的信息并执行本地和远程分析。其中一些事件无法在应用程序之外进行测试:例如,视图控制器转换。为了测试这些事件,我构建了一个测试 iOS 应用程序并希望使用 Xcode UI 测试来:
通过点击一个将 VC 推送到导航控制器的按钮或通过切换到选项卡控制器中的不同选项卡来启动视图控制器转换
验证框架是否能够检测到视图控制器转换并生成必要的事件(例如,将它们发送到服务器)
问题是 Xcode UI 测试在应用程序之外运行,因此我无法访问任何共享对象来验证框架是否正常运行。我也无法插入任何模拟对象,因为我也无权访问应用进程中加载的框架。
我什至尝试以一种测试模式加载框架,并让它更新一个标签,其中包含一些结果,然后 UI 测试将能够读取。但即使这样也很困难,因为XCUIElement 没有给我元素的实际文本;我只能查询带有一些预定义文本的元素。我可以使用它,但对于应该相当琐碎的事情来说,这似乎是一种非常迂回的方法。
是否有更好的替代方法来测试只能在正在运行的应用程序中模拟的事件,然后验证我的框架是否能够检测和处理它们?除了视图控制器转换之外,我还对触摸交互、加速度计事件和其他无法在应用程序之外模拟的功能感兴趣。当然,我可以模拟这些事件进行单元测试,但我也想自动测试当这些事件在实际应用中发生时,在我的框架中生成正确的响应。
【问题讨论】:
-
您是否考虑过对触摸事件和转换进行 UI 测试?可能是比单元测试更好的选择,具体取决于您的追求。
-
@Robert:我说的是 UI 测试,而不是单元测试。我想使用 UI 测试来点击触发 VC 转换的按钮,然后查看该转换的效果,而不是 UI 元素,而是我框架的内部组件。
-
您知道 iOS 单元测试 (XCTest) 实际上是在启动应用程序吗?您可以创建“半” UI 测试,因为您不会模拟用户事件,而是直接调用引发转换的方法。
-
@OhadSchneider:是的,但这不是我想要的。我想测试实际的 UI 转换、加速度计事件、点击等。当然,我也有单元测试,它们单独测试逻辑。你的提议处于中间位置,我也不想投资。
标签: ios xcode xcode-ui-testing ios-frameworks