使用先决条件测试 Swift 代码
Testing Swift code with preconditions
如何为具有前提条件的 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
}
这会在 运行 测试时产生错误:
Thread 1:EXEC_BAD_INSTRUCTION (Code=EXCI386_INVOP, Subcode=0x0)
有没有办法测试 Swift 的先决条件?
您测试 Swift 具有先决条件的方法,方法是仅测试具有满足这些先决条件的输入的行为。不满足前提条件时的行为无需进一步测试就很清楚,因为前提条件已融入标准库。
如果您怀疑自己是否正确指定了先决条件,可以将先决条件表达式提取到布尔函数中,然后测试它是否能正确区分有效输入和无效输入。
不过,您可以在这里为自己创造您想要的东西:
An option to generate exceptions on precondition/assertion failures would do the trick: one would turn it on in debug builds, and turn it off in release builds.
您可以编写自己的函数,例如 require
,而不是调用 Apple 的 precondition
。这可以有条件地编译以按照您的意愿行事。然后你会在任何地方使用它,否则你会使用 precondition
.
如何为具有前提条件的 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
}
这会在 运行 测试时产生错误:
Thread 1:EXEC_BAD_INSTRUCTION (Code=EXCI386_INVOP, Subcode=0x0)
有没有办法测试 Swift 的先决条件?
您测试 Swift 具有先决条件的方法,方法是仅测试具有满足这些先决条件的输入的行为。不满足前提条件时的行为无需进一步测试就很清楚,因为前提条件已融入标准库。
如果您怀疑自己是否正确指定了先决条件,可以将先决条件表达式提取到布尔函数中,然后测试它是否能正确区分有效输入和无效输入。
不过,您可以在这里为自己创造您想要的东西:
An option to generate exceptions on precondition/assertion failures would do the trick: one would turn it on in debug builds, and turn it off in release builds.
您可以编写自己的函数,例如 require
,而不是调用 Apple 的 precondition
。这可以有条件地编译以按照您的意愿行事。然后你会在任何地方使用它,否则你会使用 precondition
.