在iOS 12模拟器首次启动时测试失败

时间:2018-09-19 13:23:30

标签: xcode unit-testing ios-simulator ios12 swift4.2

关于测试,我目前在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本身。

我希望这有一定的道理,对不起,请稍等。我只是想包括所有相关信息!

0 个答案:

没有答案