【问题标题】:how to stop Xcode iOS unit tests if a fatalerror is hit?如果遇到致命错误,如何停止 Xcode iOS 单元测试?
【发布时间】:2016-06-26 03:02:32
【问题描述】:

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

如果我有 10 个单元测试,但它调用 5 号单元测试的代码碰巧有编码问题(** 在这种情况下,编码问题是在测试用例和设置代码中**)和正在抛出一个致命错误。所以在这种情况下,单元测试会停止,并且不会继续到该测试类中的其他测试用例。

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

【问题讨论】:

  • 你能提供一个示例代码吗?您使用的是哪个版本的 Xcode?我可以在这里继续我的测试。

标签: ios xcode unit-testing xctest xctestcase


【解决方案1】:

试试

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
}

【讨论】:

  • 设置“continueAfterFailure = true”似乎不起作用
  • 我认为 continueAfterFailure 仅适用于 XCTAssert 失败
【解决方案2】:

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

创建单元测试失败断点很简单,但并不容易找到。

Xcode 8+ 有一个可以添加的新断点,称为“测试失败断点”。

  1. 单击断点(左面板 ... Command + 7)
  2. 点击+(左下角)
  3. 点击“测试失败断点”

参考文献

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      var optionalVariable: Int?
      XCTAssertNotNil(optionalVariable)
      

      我建议将其添加到setUp()

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

      【讨论】:

        猜你喜欢
        • 2020-07-17
        • 2021-01-02
        • 2018-07-19
        • 2015-12-28
        • 2012-02-06
        • 1970-01-01
        • 2014-11-13
        • 2015-05-11
        相关资源
        最近更新 更多