美文网首页
Swift - XCTest 定位问题

Swift - XCTest 定位问题

作者: nicaho | 来源:发表于2024-05-18 11:37 被阅读0次

    XCTAssertEqual 判等

    我们知道,在单元测试里,可以通过 XCTAssertEqual 判断 expression1expression2 是否相等。如下

    实现方法

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

    报错信息

    报错信息1.jpg

    很显然,结果是显示错误信息 XCTAssertEqual failed: ("4") is not equal to ("3") 并指向 XCTAssertEqual 的位置

    思考

    如果,我们把 XCTAssertEqual 放到帮助方法里,还会显示错误信息吗?

    XCTAssertEqual 放到帮助方法里

    实现方法

    func test_sum() {
        let a = 1 + 2
        let b = 1 + 3
        
        checkSum4(a)
        checkSum4(b)
    }
        
    func checkSum4(_ value: Int) {
        XCTAssertEqual(4, value)
    }
    

    报错信息

    报错信息2.jpg

    我们只能在帮助方法里,看到报错,实际上不知道具体哪一行代码报错

    思考

    我们可以看一下 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 传了一个默认的 file 以及 line 这2个参数,这个能解释为什么在
    XCTAssertEqual 判等(①方法) 的 报错信息 是在 test_sum
    XCTAssertEqual 放到帮助方法里(②方法) 的 报错信息 是在 checkSum4

    接下来,我们如何解决这个问题

    XCTAssertEqual 帮助方法里 增加默认的参数 file 和 line

    实现方法

    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)
    }
    

    报错信息

    报错信息3.jpg

    此时,可以看到,报错信息在 test_sum()

    类似于 XCTAssertXCTAssertEqualXCTAssertNil 等等,都默认传了 file 和 line 两个参数。如果想在实现方法里,看到具体报错信息,需要在帮助方法里定义默认参数file 和 line,并把他们传到 XCxxxx 里,协助定位问题

    总结

    当在测试方法外部(例如,在辅助方法中)调用 XCTAssert... 函数时,将 file 和 line 传递给 XCTAssert... 函数非常重要。 这样,Xcode 可以准确地突出显示哪个测试失败以及失败的位置。

    相关文章

      网友评论

          本文标题:Swift - XCTest 定位问题

          本文链接:https://www.haomeiwen.com/subject/bowwfjtx.html