关于测试,我目前在iOS 12模拟器上遇到了一个非常奇怪的问题,我真的不知道如何解决这个问题。
我会尽力在这里进行解释,但是我不完全了解发生了什么,所以如果这没有任何意义,请原谅我!
我有一个Xcode工作区,其中包含几个单独的项目,每个项目都包含一些功能测试。
此工作空间还连接到Bitrise,以便在打开合并请求时运行测试。
一切正常,直到我将所有项目和目标升级到Swift 4.2。升级本身进行得很顺利,仅在应用程序委托中进行了1个小更改,并在项目文件中进行了设置,因此我可以肯定迁移中没有任何问题。
以前,所有测试都可以在本地模拟器和Bitrise上运行并顺利通过。
现在,在此迁移之后,有2个测试在Bitrise上失败,并且每次都是两次。
经过一番摸索,我设法在本地复制,发现如果仅在iOS 12模拟器首次启动时运行,这些测试将在本地失败。
如果我是第一次在新的iOS 11.4模拟器上进行测试,则测试全部通过。
如果我是第一次在新的iOS 12模拟器上进行测试,则两项测试将失败。
如果我随后关闭iOS 12模拟器并再次对其进行测试,则两项测试之一将失败。
它似乎与完全新的模拟器启动有关的事实解释了为什么Bitrise会失败,因为我想象它会在每个构建版本都有新模拟器的新环境中运行(尽管也许我会幸运地在某个时候继续运行)一台已经运行iOS 12模拟器的机器,那么一切都可以正常工作吗?!)。
测试本身与区域监视有关。我有一个模拟位置管理器,它在发送对区域的监视请求时将区域附加到数组,并在发送停止监视的请求时将其删除。
失败的测试是testStopScanningRemovesMonitoredRegions
的一部分,因此我添加了两个要监视的区域,然后一个一个地删除它们,以确保监视区域的数量减少。
添加两个区域的断言通过。
每次删除后的声明都会失败。
我正在测试我创建的中间对象是否正确请求了这些启动/停止监视事件,而不是CLLocationManager
本身。
我希望这有一定的道理,对不起,请稍等。我只是想包括所有相关信息!