2016-03-14 174 views
1

我正在爲我的iBeaconManager編寫測試用例。在我的iBeaconManager中包含一個CLLocationManager實例,並將其委託設置爲iBeaconManager。我向每個區域的iBeaconManager傳遞了一個CLCircularRegions數組,稱爲我的位置管理器的[startMonitoringForRegion:]方法。由於某種原因,我的位置管理器的[didStartMonitoringForRegion:]不會被調用。我做錯了什麼?XCTest CLLocationManager的委託方法不會被調用

回答

2

您的測試呼叫startMonitoringForRegion:。根據您的設置,這可能會或可能不會觸發回調。但即使這樣做,它也是異步的,需要時間。在這種情況發生之前,測試結束並消失。

嘗試這些方法中的一種,具體取決於你的目標:

  1. 端至端測試:讓你的測試重新同步,異步操作。如果您使用直接XCTest,請執行XCTestExpectation。其他附加測試庫可以使同步更容易。 (我更喜歡OCHamcrest的assertWithTimeout。)
  2. 單元測試:請勿使用實際的CLLocationManager。相反,注入一個假的。然後您的測試可以直接調用didStartMonitoringForRegion:,就好像它已被CLLocationManager調用。這是從任何框架測試回調的常用方法。

單元測試方法的優點包括速度,可靠性,並且您可以在模擬器上運行(因此它可以是您的持續集成的一部分)。而且,您可以模擬任意數量的條件而不必創建這些條件。例如,很容易回調出錯或其他邊緣情況。

相關問題