2016-03-14 113 views
1

我正在为我的iBeaconManager编写测试用例。在我的iBeaconManager中包含一个CLLocationManager实例,并将其委托设置为iBeaconManager。我向每个区域的iBeaconManager传递了一个CLCircularRegions数组,称为我的位置管理器的[startMonitoringForRegion:]方法。由于某种原因,我的位置管理器的[didStartMonitoringForRegion:]不会被调用。我做错了什么?XCTest CLLocationManager的委托方法不会被调用

回答

2

您的测试呼叫startMonitoringForRegion:。根据您的设置,这可能会或可能不会触发回调。但即使这样做,它也是异步的,需要时间。在这种情况发生之前,测试结束并消失。

尝试这些方法中的一种,具体取决于你的目标:

  1. 端至端测试:让你的测试重新同步,异步操作。如果您使用直接XCTest,请执行XCTestExpectation。其他附加测试库可以使同步更容易。 (我更喜欢OCHamcrest的assertWithTimeout。)
  2. 单元测试:请勿使用实际的CLLocationManager。相反,注入一个假的。然后您的测试可以直接调用didStartMonitoringForRegion:,就好像它已被CLLocationManager调用。这是从任何框架测试回调的常用方法。

单元测试方法的优点包括速度,可靠性,并且您可以在模拟器上运行(因此它可以是您的持续集成的一部分)。而且,您可以模拟任意数量的条件而不必创建这些条件。例如,很容易回调出错或其他边缘情况。

相关问题