Swift - XCTest 定位問(wèn)題

XCTAssertEqual 判等

我們知道,在單元測(cè)試?yán)铮梢酝ㄟ^(guò) XCTAssertEqual 判斷 expression1expression2 是否相等。如下

實(shí)現(xiàn)方法

func test_sum() {
    let a = 1 + 2
        
    XCTAssertEqual(4, a)
}

報(bào)錯(cuò)信息

報(bào)錯(cuò)信息1.jpg

很顯然,結(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ò)信息2.jpg

我們只能在幫助方法里,看到報(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ò)信息

報(bào)錯(cuò)信息3.jpg

此時(shí),可以看到,報(bào)錯(cuò)信息在 test_sum()

類似于 XCTAssertXCTAssertEqualXCTAssertNil 等等,都默認(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è)試失敗以及失敗的位置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容