ios - 如何对涉及 CLBeacon 的逻辑进行单元测试?

标签 ios unit-testing core-location ibeacon

我想在涉及 CLBeacon 的 View Controller 上运行一些测试。不幸的是,虽然 CLBeacons 本身不是私有(private)类,但它们的所有必要属性都是只读的,没有任何写访问器。

这些方法的编写方式应有助于最大限度地提高可测试性,但没有生成 CLBeacon 的能力,我该如何测试我的 View Controller 的相关逻辑?

编辑:

为了解释我的目的范围,我有时会在应用程序中遇到一些奇怪的行为。我想通过测试各种场景并确认我的代码中的各种其他相关组件正常工作,来尝试确认奇怪行为的来源是在代码的特定区域。 (例如,我可以测试我的数据处理是否正常工作,因此我知道是动画/布局代码出现了问题)。

最佳答案

我是通过使用 OCMockito 完成的使用 XCTest。

CLBeacon *mockBeacon = mock([CLBeacon class]);

然后我可以使用它来调用作为 CoreLocation 委托(delegate)的类的委托(delegate)方法。测试可能如下所示:

- (void)testDidRangeOnABeacon
{
    MyLocationDelegate *myDelegate = [[MyLocationDelegate alloc] init];

    CLLocationManager *mockManager = mock([CLLocationManager class]);
    CLBeacon *mockBeacon  = mock([CLBeacon class]);
    CLBeaconRegion *mockRegion  = mock([CLBeaconRegion class]);


    [myDelegate locationManager:mockManager
                didRangeBeacons:@[mockBeacon]
                       inRegion:mockRegion];


    // XCTAsserts...
    XCTAssert([myDelegate.checkSomethingAboutRanging]);
}

关于ios - 如何对涉及 CLBeacon 的逻辑进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23575301/

相关文章:

ios - UISearchBar 和 UISearchBarController 之间的区别?

iphone - Markdown 到 NSAttributedString 库?

调用未知名称的函数

objective-c - OCMock 2.2.1、Xcode 5.0.2、XCTest 和模拟类方法(在类别中声明)的问题

ios - 我希望 func locationManager(manager : CLLocationManager, didUpdateToLocation 即使在应用程序被终止后也能被调用?

ios - 讨论,iOS 编程的最佳方式?

ios - EKEvent 的旅行时间

javascript - 诗农.js : How to mock a object constructed with new?

iphone - 长时间运行的操作(用于更新当前显示的iphone TableView 中的数据)的最佳实践是什么?

ios - requestAlwaysAuthorization 不显示权限警报