使用前置条件测试Swift代码

das*_*ght 9 preconditions xctest swift

你如何为具有前提条件的Swift方法编写测试?这是一个例子:

func doublePositive(n:Int) -> Int {
    precondition(n >= 0)
    return 2*n
}
Run Code Online (Sandbox Code Playgroud)

使用XCTAssertThrowsError不起作用:

func testDoublePositive() {
    XCTAssertEqual(10, testObject.doublePositive(5))    // Works
    XCTAssertThrowsError(testObject.doublePositive(-1)) // Breaks 
}
Run Code Online (Sandbox Code Playgroud)

这在运行测试时会生成错误:

线程1:EXEC_BAD_INSTRUCTION(代码= EXCI386_INVOP,子代码= 0x0)

有没有办法测试Swift的前提条件?

Jer*_*man 6

您可以通过仅使用满足这些前提条件的输入测试行为来测试具有前提条件的Swift方法.不满足前提条件时的行为是清楚的,无需进一步测试,因为前置条件被烘焙到标准库中.

如果您怀疑是否已正确指定前置条件,则可以将前置条件表达式拉出为布尔函数,然后测试该函数以正确识别无效输入中的有效值.

但是,您可以为自己创建您想要的内容:

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

例如precondition,你可以编写自己的函数,而不是打电话给Apple require.这可以有条件地编译,以按您的意愿行事.然后,您将在其他任何地方使用它precondition.