我正在编写一个使用GoogleMaps的iOS应用。我编写了一些单元测试来测试单独的业务逻辑模块。它们看起来像这样:
func testIfStationsExistNearPoint1() {
let comMangager = CommunicationManager()
comMangager.getListOfStations(coordinates: Coordinates(longitude: Constants.Point1CoordinateLongitude, latitude: Constants.Point1CoordinateLatitude), distance: 50, completion: { (json) in
if (json != nil) {
let stations = StationWrapper.sharedStationWrapper.jsonToStations(json: json!)
assert(stations.count > 0, String(format:"%ld stations", stations.count))
}
else {
XCTFail("json is nil")
}
}) { (error) in
XCTFail(String(format:"List of stations returned error: %@", error))
}
}
请注意,这些单元测试与UI完全分开(使用GoogleMaps的地方。坐标是自定义类,而不是GoogleMaps CLLocationCoordinate2D。)
另请注意,该应用程序本身可以正常工作。而且我100%肯定,在主应用程序中,所有使用地图绘制的代码都在主线程中调用。
然而,当我尝试任何我的单元测试时,我收到此错误:
com.google.Maps.LabelingBehavior(15): - [UIApplication applicationState]必须仅从主线程
使用
当我在本单元测试的第一行设置一个断点时,它甚至没有被击中。模拟器和真实设备都是一样的。
我想知道,甚至可能,因为我在单元测试中没有使用谷歌地图?我试图搜索类似的案例,但没有找到任何相关的单元测试。
任何想法在这里有什么不对,因为我觉得完全陷入困境?
答案 0 :(得分:0)
XCode在执行单元测试之前启动您的应用程序。
因此,在Xcode开始执行单元测试之前,应用程序会生成此错误。这就是为什么你的测试开始时的断点没有被击中的原因。
放置异常断点会引导您找到问题的根源。