2015-10-15 60 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)