11

你如何为有前置条件的 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 的先决条件?

4

1 回答 1

7

您可以通过仅测试具有满足这些先决条件的输入的行为来测试具有先决条件的 Swift 方法。不满足前提条件时的行为很清楚,无需进一步测试,因为前提条件已被纳入标准库。

如果您怀疑自己是否正确指定了前提条件,您可以将前提条件表达式提取到布尔函数中,然后对其进行测试,以正确区分有效输入和无效输入。

但是,您可以在这里为自己创建您想要的东西:

在前置条件/​​断言失败时生成异常的选项可以解决问题:可以在调试版本中将其打开,并在发布版本中将其关闭。

precondition您可以编写自己的函数,而不是调用 Apple 的require. 这可以有条件地编译为您希望的行为。然后,您将在任何地方使用它,否则您将使用precondition.

于 2017-05-13T22:02:45.163 回答