XCTAssertEqual 判等
我們知道,在單元測(cè)試?yán)铮梢酝ㄟ^(guò) XCTAssertEqual
判斷 expression1
和 expression2
是否相等。如下
實(shí)現(xiàn)方法
func test_sum() {
let a = 1 + 2
XCTAssertEqual(4, a)
}
報(bào)錯(cuò)信息
很顯然,結(jié)果是顯示錯(cuò)誤信息 XCTAssertEqual failed: ("4") is not equal to ("3")
并指向 XCTAssertEqual
的位置
思考
如果,我們把 XCTAssertEqual
放到幫助方法里,還會(huì)顯示錯(cuò)誤信息嗎?
XCTAssertEqual 放到幫助方法里
實(shí)現(xiàn)方法
func test_sum() {
let a = 1 + 2
let b = 1 + 3
checkSum4(a)
checkSum4(b)
}
func checkSum4(_ value: Int) {
XCTAssertEqual(4, value)
}
報(bào)錯(cuò)信息
我們只能在幫助方法里,看到報(bào)錯(cuò),實(shí)際上不知道具體哪一行代碼報(bào)錯(cuò)
思考
我們可以看一下 XCTAssertEqual
的定義
public func XCTAssertEqual<T>(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) where T : Equatable
XCTAssertEqual 傳了一個(gè)默認(rèn)的 file 以及 line 這2個(gè)參數(shù),這個(gè)能解釋為什么在
XCTAssertEqual 判等(①方法) 的 報(bào)錯(cuò)信息 是在 test_sum
里
XCTAssertEqual 放到幫助方法里(②方法) 的 報(bào)錯(cuò)信息 是在 checkSum4
里
接下來(lái),我們?nèi)绾谓鉀Q這個(gè)問(wèn)題
XCTAssertEqual 幫助方法里 增加默認(rèn)的參數(shù) file 和 line
實(shí)現(xiàn)方法
func test_sum() {
let a = 1 + 2
let b = 1 + 3
checkSum4(a)
checkSum4(b)
}
func checkSum4(_ value: Int, file: StaticString = #filePath, line: UInt = #line) {
XCTAssertEqual(4, value, file: file, line: line)
}
報(bào)錯(cuò)信息
此時(shí),可以看到,報(bào)錯(cuò)信息在 test_sum()
里
類似于 XCTAssert
, XCTAssertEqual
,XCTAssertNil
等等,都默認(rèn)傳了 file 和 line 兩個(gè)參數(shù)。如果想在實(shí)現(xiàn)方法里,看到具體報(bào)錯(cuò)信息,需要在幫助方法里定義默認(rèn)參數(shù)file 和 line,并把他們傳到 XCxxxx
里,協(xié)助定位問(wèn)題
總結(jié)
當(dāng)在測(cè)試方法外部(例如,在輔助方法中)調(diào)用 XCTAssert... 函數(shù)時(shí),將 file 和 line 傳遞給 XCTAssert... 函數(shù)非常重要。 這樣,Xcode 可以準(zhǔn)確地突出顯示哪個(gè)測(cè)試失敗以及失敗的位置。