如果遇到致命错误,如何停止 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".
- 单击断点(左面板...Command + 7)
- 点击 +(左下角)
- 点击"Test Failure Breakpoint"
参考资料
在所有地方编写安全代码是一种很好的做法,包括您的单元测试。
关于您的问题,正如 Oleg Danu 所回答的那样,您应该设置 continueAfterFailure = false
。
下一步是在测试崩溃之前添加以下内容。
var optionalVariable: Int?
XCTAssertNotNil(optionalVariable)
我建议将其添加到 setUp()
这样你的测试就会在崩溃前停止Xcode,你不需要设置任何断点。
如果发生致命错误,我如何停止 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".
- 单击断点(左面板...Command + 7)
- 点击 +(左下角)
- 点击"Test Failure Breakpoint"
参考资料
在所有地方编写安全代码是一种很好的做法,包括您的单元测试。
关于您的问题,正如 Oleg Danu 所回答的那样,您应该设置 continueAfterFailure = false
。
下一步是在测试崩溃之前添加以下内容。
var optionalVariable: Int?
XCTAssertNotNil(optionalVariable)
我建议将其添加到 setUp()
这样你的测试就会在崩溃前停止Xcode,你不需要设置任何断点。