【问题标题】:Calling OS X code from an iOS XCTestCase running On-Device从在设备上运行的 iOS XCTestCase 调用 OS X 代码
【发布时间】:2014-01-27 21:59:21
【问题描述】:

我正在尝试将最小的 BLE 测试工具放在一起,测试控制 BLE 连接的两端。被测代码在设备上运行(iOS7 模拟器不支持 BLE)并使用CBCentralManager。连接的外围端将在 MacBook Pro 上。

iOS XCTestCase 在 Xcode 下运行在同一台 Mac 上。

我希望在 XCTestCase 中运行的测试代码能够控制 BLE 连接的外围端。

因此,一个典型的测试可能是:

1) XCTestCase 调用被测代码以使其连接到外围设备 (Mac)。 2) 连接完成后,XCTestCase 会导致外围设备(mac)关闭连接。 3)XCTestCase在iOS中检查被测代码生成的结果。

所以我的问题是 iOS XCTestCase 如何与在 OS X(Mac 环境)中运行的代码进行通信/控制 一切都在Xcode 监督下的同一台mac 上运行,除了充当外围端的代码。

我希望我已经很好地解释了这个场景,并且这是解决此类问题的正确位置。

我的一个想法是在 Mac 上运行一个 Web 服务器,XCTestCase 代码和外围代码都可以将消息传递给对方。更直接的交流会更好。

谢谢。

【问题讨论】:

  • 你确定要测试这个吗?这就像通过实际执行 Web 请求来测试 Web 连接(除非我误解了这个问题)。取而代之的是嘲笑不是更好吗?
  • 测试对象是低功耗蓝牙功能,以确保 iOS 应用在连接的 Central 端的有效行为。因此,XCTest 需要创建/强制条件(例如断开连接),然后监控应用程序的行为方式。例如,确保应用程序尝试重试重新连接。 Web 元素(本地服务器,在 mac 上运行)被简单地提出作为 XCTest 控制连接外围端的一种方法。对冗长的评论感到抱歉,希望它能澄清。

标签: ios objective-c xcode macos core-bluetooth


【解决方案1】:

The iOS XCTestCase is running on the same Mac under Xcode.

那不是真的。 iOS 测试用例不在 Mac 上运行。它们被注入应用程序并在 iOS 设备上运行。 Xcode 只监听一些设备事件。

让我们简化问题 - 您希望 iOS 和 Mac 进行通信。这是在生产应用程序中还是在运行测试时都无关紧要。 XCTest 与 iOS 应用程序的任何其他部分的工作方式相同,并且可以访问相同的类。

创建从 iOS 设备到 mac 的套接字(或从设备向 mac 发送 HTTP 请求)是最简单的解决方案。如果您希望通信通道双向工作,原始 TCP 套接字应该是更好的解决方案。

【讨论】:

  • Sulthan,感谢您阐明 XCTests 的工作原理。我问只是以防万一;您有什么建议可以在哪里寻找双向通信的原始 TCP 套接字的示例。我想这是解决问题的唯一方法,因为我必须跨越操作系统边界。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 2013-09-12
  • 2011-01-29
  • 2011-11-02
  • 2015-06-20
  • 1970-01-01
相关资源
最近更新 更多