我使用的是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
断言。
我可以以某种方式禁用断言进行测试吗?
答案 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))
}
}
在您的应用中,您可以继续使用x
和y
参数
divide(5, 0)
你会得到一个断言。
在您的测试中,您可以使用safe
参数作为false
来调用它,它会绕过断言并允许您对结果使用XCTAssert
:
let res = divide(5, 0, false)
XCTAssert(res == nil)