XCTest CLLocationManager的委托方法不会被调用

时间:2016-03-14 21:19:39

标签: ios objective-c cllocationmanager ibeacon xctest

我正在为iBeaconManager编写测试用例。我的iBeaconManager内部包含一个CLLocationManager实例,其委托设置为iBeaconManager。我将一个CLCircularRegions数组传递给我的iBeaconManager,称为我的位置管理器[startMonitoringForRegion:]方法。我的位置管理员[didStartMonitoringForRegion:]由于某种原因没有被调用。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的测试呼叫startMonitoringForRegion:。根据您的设置,这可能会也可能不会触发回调。但即使它确实如此,它也是异步的并且需要时间。在此之前,测试结束并消失。

根据您的目标尝试其中一种方法:

  1. 端到端测试:让您的测试重新同步异步操作。如果您正在使用直接XCTest,请执行已满足的XCTestExpectation。其他附加测试库可以使同步更容易。 (我更喜欢OCHamcrest' assertWithTimeout。)
  2. 单元测试:不要使用实际的CLLocationManager。相反,注入假货。然后,您的测试可以直接调用didStartMonitoringForRegion: ,就像它已被CLLocationManager调用一样。这是从任何框架测试回调的常用方法。
  3. 单元测试方法的优点包括速度,可靠性,您可以在模拟器上运行(因此它可以成为您持续集成的一部分)。此外,您可以模拟任意数量的条件,而无需创建这些条件。例如,可以通过错误或其他边缘情况轻松回拨。