如果遇到致命错误,如何停止 Xcode iOS 单元测试?

how to stop Xcode iOS unit tests if a fatalerror is hit?

如果发生致命错误,我如何停止 Xcode iOS 单元测试?

那是为了防止我有 10 个单元测试,但碰巧它为单元测试编号 5 调用的代码存在编码问题(** 在这种情况下,编码问题出现在测试用例和设置代码中 ** ) 并抛出 fatalError。因此,在这种情况下,单元测试会停在那里,不会继续该测试中的其他测试用例 class。

(不确定这是否是良好单元测试的预期操作/过程?)

没有简单的解决方法。如果出现未捕获的 (objc) 异常或失败 assert,运行单元测试的进程确实会收到 mach 异常或 unix 信号。

Matt Gallagher 对此有一个很好的解决方案,他提出了 in this blog post

尝试

override func setUp() {
    super.setUp()
    // Put setup code here. This method is called before the invocation of each test method in the class.

    continueAfterFailure = false
}

我遇到的一个相关问题是在单元测试失败时用断点停止它,这样我就可以看到问题,而不必单击或滚动大量的测试输出。

制作单元测试失败断点很简单,但不容易找到。

Xcode 8+ 有一个可以添加的新断点,称为 "Test Failure Breakpoint".

  1. 单击断点(左面板...Command + 7)
  2. 点击 +(左下角)
  3. 点击"Test Failure Breakpoint"

参考资料

在所有地方编写安全代码是一种很好的做法,包括您的单元测试。

关于您的问题,正如 Oleg Danu 所回答的那样,您应该设置 continueAfterFailure = false

下一步是在测试崩溃之前添加以下内容。

var optionalVariable: Int?
XCTAssertNotNil(optionalVariable)

我建议将其添加到 setUp()

这样你的测试就会在崩溃前停止Xcode,你不需要设置任何断点。