使用前置条件测试Swift代码

时间:2016-04-18 11:46:18

标签: swift xctest 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 
}

运行测试时会产生错误:

  

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

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

1 个答案:

答案 0 :(得分:6)

通过仅使用满足这些前提条件的输入测试行为来测试具有前提条件的Swift方法。未满足前提条件时的行为是明确的,无需进一步测试,因为前提条件已经融入标准库。

如果您怀疑自己是否已正确指定前置条件,则可以将前提条件表达式拉出为布尔函数,然后对其进行测试,以便从无效输入中正确识别有效值。

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

  

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

您可以编写自己的函数,例如precondition,而不是调用Apple的require。这可以有条件地编译,以按您的意愿行事。然后,您将使用此处,除非您使用precondition