快速咬合#1:测试Swift可选

快速测试可选组件时 ,有两种方法。 其中之一是通过在我们的代码中引入条件(如果,守卫……),但这是我们在测试中要避免的事情,因为添加新的流程并不是我们测试所希望的。

我们如何避免这种情况? 我们可以使测试失败,从而中断测试,但又不中断其他测试的执行,同时避免在代码中添加条件。 这是可恢复不可恢复错误起作用的地方。 就本文而言,我们仅关注可恢复的错误。

崩溃

避免在我们的代码中引入条件的一种方法是让测试崩溃。 当测试崩溃时,Xcode将恢复并恢复未决测试的执行。 您可以通过强制展开可选内容来完成此操作,如果该值为nil,则测试将崩溃。 测试将恢复,但是Xcode将出现以下错误:

就个人而言,我宁愿避免重新启动Xcode来恢复测试,而这就是下一个选择的地方:

测试失败的另一种方法是让它抛出错误。 但是众所周知,展开时不会抛出可选选项 。 但这可以通过在Optional枚举中添加新功能来轻松解决。 我们只需要添加一个在包装值的解压缩为nil时引发错误的函数。 我们可以这样做如下:

您可以阅读的第一件事是在发生展开错误时我们希望打印的消息,以在调试器中获得更多帮助。 第二部分是调试器为测试失败打印的内容。 显然,与坠机事件相比,该消息没有那么生动。

那么,您应该选择哪一个呢? —完全取决于您。 我的建议是选择崩溃而不是崩溃,因为它不需要Xcode来恢复那么多。 对我来说,每次在Xcode而不是终端上运行时测试崩溃时,Xcode都不会继续执行其余的测试文件,但是当测试抛出错误时,Xcode会继续运行。


有关可恢复不可恢复错误的更多信息,请阅读John Sundell的精彩文章。


Swift Bite是一系列小的“直截了​​当”的文章。 我希望以后继续谈论更多可以简单解释的不同事情。


如果您喜欢这篇文章,请考虑拍一下。 另外,如果您愿意,可以在Twitter上关注我,@ MikePT28或“中”。