【问题标题】:How can you test that an index is out of range in Swift?如何在 Swift 中测试索引是否超出范围?
【发布时间】:2017-07-22 19:31:51
【问题描述】:

在单元测试中,我想断言有可能引发索引超出范围错误的方法实际上会引发该错误。

我正在尝试使用

let array = [1,2,3]
XCTAssertThrowsError(array[3])    

为什么这不起作用?

我该如何测试?

【问题讨论】:

  • 不确定,但我认为它适用于 errorHandling 以及符合 Error 的对象,而不是像这样的实际错误。
  • 它不起作用,因为它不是抛出错误,而是它是一个异常,这是完全不同的事情。
  • 还有这个问题stackoverflow.com/questions/32873212/… 有一些单元测试方法fatalError()
  • @Rob 这就是我们应该做的测试吗?!这就像测试 Swift 语言的异常是否正常工作......
  • @Honey - 不,您不会编写单元测试来测试 Swift 中的异常/故障/崩溃。如果您要处理特定的错误情况,请编写应用程序代码以防止崩溃的方式优雅地处理它,然后对其进行测试。

标签: swift xcode unit-testing xctest


【解决方案1】:
let array = [1,2,3]
XCTAssertThrowsError(array[3])    

为什么这不起作用?

因为引用超出范围的索引不会 抛出。它崩溃,这是完全不同的事情。

我该如何测试?

你如何测试什么?如果问题是建议的索引对于给定数组是否合法,请使用indices.contains

let array = [1,2,3]
let ix = 3
XCTAssert(array.indices.contains(ix), "Index out of bounds")

【讨论】:

  • 我接受了,因为这是测试索引是否超出范围的一个很好的答案,但它仍然没有回答如何拯救 FatalError/crash/etc... 真的是我的问题措辞不正确。 :)
  • 你说得对,措辞不正确。你不能“挽救一个致命的错误/崩溃”,这已经在 Stack Overflow 上处理过很多次了。这就是为什么我的回答说,在使用越界表达式之前测试边界。这就像as!as?;你可以使用as? 进行测试,但如果你不使用as! 并且转换失败,你会崩溃并且你无法阻止它
猜你喜欢
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2016-02-07
  • 1970-01-01
相关资源
最近更新 更多