如何获取Xcode中XCTAssertTrue等断言的返回结果?
获取Xcode中XCTAssert系列方法的执行结果与返回值解析
嘿,我来给你捋清楚Xcode里XCTAssert这些断言方法的事儿~
首先得明确一个核心点:所有XCTAssertTrue()、XCTAssertEqual()、XCTAssertFalse()这类系统断言方法,本身都是没有返回值的——它们的返回类型是void,所以你没法直接拿到它们的返回值。不过要获取它们的执行结果(成功还是失败),倒是有两种实用的办法:
方法一:通过XCTest观察者监听断言结果
XCTest框架提供了测试观察机制,你可以自定义一个观察者来捕获断言的失败事件(成功的话不会触发回调,默认就代表断言通过了)。
举个实际的代码例子:
import XCTest // 自定义测试观察者,实现XCTestObservation协议 class CustomTestObserver: NSObject, XCTestObservation { func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) { // 这里能拿到所有断言失败的详细信息:失败描述、所在文件、行号 print("断言失败:\(description),文件:\(filePath ?? "未知文件"),行号:\(lineNumber)") } } // 在测试类里注册这个观察者 class MyTestSuite: XCTestCase { override class func setUp() { super.setUp() let observer = CustomTestObserver() XCTestObservationCenter.shared.addTestObserver(observer) } func testSample() { XCTAssertTrue(2 + 2 == 5, "2加2不等于5哦") XCTAssertEqual("Hello", "World") XCTAssertFalse(10 > 5) } }
当你运行测试时,只要有断言失败,自定义观察者的回调方法就会触发,你就能在这里捕获到对应的执行结果。
方法二:封装自己的断言函数,返回执行结果
如果你想在测试代码里直接拿到断言的成功/失败状态,可以自己封装一层断言方法,内部调用系统的XCTAssert,同时返回布尔值表示结果。
比如封装一个自定义的XCTAssertTrue替代方法:
import XCTest func myAssertTrue(_ condition: @autoclosure () -> Bool, message: String = "", file: StaticString = #file, line: UInt = #line) -> Bool { let isSuccess = condition() // 调用系统断言,保证测试报告里能正常显示失败信息 XCTAssertTrue(isSuccess, message, file: file, line: line) return isSuccess }
然后在测试里使用:
func testCustomAssert() { let result = myAssertTrue(10 == 10, message: "10等于10的断言通过") if result { print("这个断言执行成功啦") } else { print("断言失败了") } }
这种方式既能保留系统断言的测试报告能力,又能让你直接拿到断言的执行结果,非常灵活。
简单总结下:系统的XCTAssert系列方法本身没有返回值,但通过测试观察者或者自定义封装的方式,就能间接获取它们的执行结果啦。
内容的提问来源于stack exchange,提问作者Coder95
相关产品推荐
相关产品推荐

