我一直在网上搜索一种模拟CLBeacon对象的方法,以便测试我的一个类。我能找到的只与COMockito有关,它只与Objective-c兼容。
我需要的是能够创建一个模拟CLBeacon并设置其主要次要和UUID值。问题是这些参数是只读的。
有什么想法我可以做一个带有我设置参数的模拟CLBeacon吗?
答案 0 :(得分:2)
我不确定为什么我总是忘记NSCoding,但你可以使用KVO语法来训练CLBeacon对象。我终于让单元测试与CLBeacon一起工作了:
let mockUUID = NSUUID(UUIDString: uuidString)
let testBeacon = CLBeacon()
testBeacon.setValue(testMajor, forKey: "major")
testBeacon.setValue(testMinor, forKey: "minor")
testBeacon.setValue(mockUUID, forKey: "proximityUUID")
testBeacon.setValue(CLProximity.Far.rawValue, forKey: "proximity")
答案 1 :(得分:0)
可能晚到了聚会。发布它以防万一有人面对同样的问题。
不幸的是,至少在撰写本文时,在iOS13中,所有CLBeacon属性都被屏蔽在 _internal NSObject 属性中,而该属性又保留了相对值。 / p>
结果是您不能使用简单的值/键方法。同样,公开的CLBeacon类的公共头文件也没有公开相对方法以任意值初始化内部对象。
This gist,创建一个FakeBeacon Obj-C类,该类重新启用所需的init方法,并允许通过以下方式从Swift进行此类调用:
var beacon = FakeBeacon(fakeWithUUID: UUID(uuidString: uuid)!,
major: 1,
minor: 100,
proximity: 2,
accuracy: 1,
rssi: 0,
timestamp: Date().timeIntervalSinceReferenceDate)
很明显,您不应在生产IPA中包含此类代码,否则苹果的拒绝是不可避免的。