GoogleMaps打破业务逻辑单元测试

时间:2018-03-15 12:32:41

标签: ios swift google-maps unit-testing

我正在编写一个使用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]必须仅从主线程

使用

当我在本单元测试的第一行设置一个断点时,它甚至没有被击中。模拟器和真实设备都是一样的。

我想知道,甚至可能,因为我在单元测试中没有使用谷歌地图?我试图搜索类似的案例,但没有找到任何相关的单元测试。

任何想法在这里有什么不对,因为我觉得完全陷入困境?

1 个答案:

答案 0 :(得分:0)

XCode在执行单元测试之前启动您的应用程序。

因此,在Xcode开始执行单元测试之前,应用程序会生成此错误。这就是为什么你的测试开始时的断点没有被击中的原因。

放置异常断点会引导您找到问题的根源。