用先决条件测试Swift代码



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

您只使用满足这些先决条件的输入来测试行为,从而测试具有先决条件。不满足先决条件时的行为在没有进一步测试的情况下是清楚的,因为先决条件已烘焙到标准库中。

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

然而,你可以在这里为自己创建你想要的东西:

在前置条件/断言失败时生成异常的选项可以做到这一点:在调试构建中打开它,在发布构建中关闭它。

您可以编写自己的函数,比如require,而不是调用苹果的precondition。这可以有条件地编译,以按照您的意愿进行操作。然后,您可以在任何使用precondition的地方使用它。

最新更新