【发布时间】:2016-08-10 03:18:05
【问题描述】:
如何为具有前置条件的 Swift 方法编写测试?这是一个例子:
func doublePositive(n:Int) -> Int {
precondition(n >= 0)
return 2*n
}
使用XCTAssertThrowsError 不起作用:
func testDoublePositive() {
XCTAssertEqual(10, testObject.doublePositive(5)) // Works
XCTAssertThrowsError(testObject.doublePositive(-1)) // Breaks
}
这会在运行测试时产生错误:
线程 1:EXEC_BAD_INSTRUCTION(代码=EXCI386_INVOP,子代码=0x0)
有没有办法测试 Swift 的前置条件?
【问题讨论】:
-
没有标准的方法来“捕捉”前置条件的失败,它总是会停止程序,不过有一些调整,看看cocoawithlove.com/blog/2016/02/02/…
-
@ogres 哇,这篇文章不错,谢谢!
-
我迫不及待地想在非测试代码中看到这一点。我很高兴这可以让您测试您要测试的内容,但我讨厌那个网站......因为我保证有人在他们的主要目标中实现了这个并且孤立崩溃的线程只是为了防止应用程序崩溃...... (我这么说是因为我在他们类似的 Objective-C 文章中看到过这种情况……)
-
@nhgrif 我希望 Apple 能够让开发人员更轻松地测试先决条件,因为他们处于最佳位置。在前置条件/断言失败时生成异常的选项可以解决问题:可以在调试版本中将其打开,并在发布版本中将其关闭。如果 Apple 不希望包罗万象的做法泛滥,Apple 甚至可以拒绝使用此选项编译的应用程序。
-
我同意。能够测试你的代码对你来说很重要......我只知道这些东西被滥用了。 :(
标签: swift xctest preconditions