2015-10-15 43 views
1

我正在使用Swift2。Swift XCTest并声明

假设我有一个函数:

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

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

出于调试目的,我想使用断言,所以可以看到,当在该功能通过Y = 0。

我想也有生产一种解决方法(我不想崩溃,只是通知用户),他不能为0分我有一个测试:

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

但是相反完成测试我得到EXC_BAD_ACCESS断言在分功能。

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

回答

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)