Swift XCTest并断言

时间:2015-10-15 07:55:24

标签: swift

我使用的是Swift2。

假设我有一个功能:

func divide(x x:Int, y:Int) -> Double? {
    assert(y != 0)

    if (y == 0) {
        return nil
    } else {
        return (Double(x)/Double(y))
    }
}

出于调试目的,我喜欢使用assert,所以我可以看到在这个函数中传递y = 0的时间。

我还希望在制作中有一个解决方法(我不想崩溃,只是通知用户),他不能除以0.我有一个测试:

let res = divide(5, 0)
XCTAssert(res == nil)

但是我没有完成测试,而是在除法函数中得到EXC_BAD_ACCESS断言。

我可以以某种方式禁用断言进行测试吗?

1 个答案:

答案 0 :(得分:2)

一个选项是向函数添加一个默认参数,用于绕过断言:

func divide(x x:Int, y:Int, safe:Bool=true) -> Double? {
    if safe {
        assert(y != 0)
    }

    if (y == 0) {
        return nil
    } else {
        return (Double(x)/Double(y))
    }
}

在您的应用中,您可以继续使用xy参数

进行调用
divide(5, 0)

你会得到一个断言。

在您的测试中,您可以使用safe参数作为false来调用它,它会绕过断言并允许您对结果使用XCTAssert

let res = divide(5, 0, false)
XCTAssert(res == nil)