我正在编写测试以测试CoreLocation
相关功能。如果未启用位置服务,此函数将引发错误。
func someFunction() throws {
guard CLLocationManager.locationServicesEnabled() throw NSError.init(
domain: kCLErrorDomain,
code: CLError.Code.denied.rawValue,
userInfo: nil)
}
...
}
在我的测试中,CLLocationManager.locationServicesEnabled()
始终为true
。有没有办法测试false
场景?
答案 0 :(得分:0)
不是直接使用静态方法,而是将此调用包装在类中,并使该类采用协议,因此您的代码将依赖于该接口而不是具体实现。
protocol LocationManager {
var islocationServicesEnabled: Bool { get }
}
class CoreLocationManager: LocationManager {
var islocationServicesEnabled: Bool {
return CLLocationManager.locationServicesEnabled()
}
}
然后你的函数(或类)应该接收该依赖而不是拥有它(依赖注入):
func someFunction(locationManager: LocationManager) throws {
guard locationManager.islocationServicesEnabled else {
//...
}
}
在测试中,您可以传递“假”位置管理器并测试所有方案。 (在您的生产代码中,您传递了CoreLocationManager。)
这是对任何依赖的一般建议。