UI测试/单元测试中自定义日志内容?Xcode 9真机日志显示问题
在Xcode 9真机测试中添加自定义日志到测试报告
当然可以!NSLog和Swift.print的内容之所以没出现在Report Navigator的测试日志里,是因为真机测试时,应用进程的标准输出不会被Xcode的测试框架捕获到——测试报告只收集XCTest框架生成的日志内容。
下面给你两种实用的方法:
方法一:用XCTContext添加带活动标签的自定义日志
这是最规范的方式,日志会以独立的活动项展示在测试报告里,可读性很强:
Swift 示例
func testCustomLog() { // 执行测试操作... // 添加自定义日志 XCTContext.runActivity(named: "用户登录流程日志") { activity in activity.add(XCTAttachment(string: "用户输入了正确的账号密码")) activity.add(XCTAttachment(string: "登录请求发送成功,等待响应")) } // 继续测试... }
Objective-C 示例
- (void)testCustomLog { // 执行测试操作... [XCTContext runActivityNamed:@"用户登录流程日志" block:^(id<XCTActivity> activity) { [activity addAttachment:[XCTAttachment attachmentWithString:@"用户输入了正确的账号密码"]]; [activity addAttachment:[XCTAttachment attachmentWithString:@"登录请求发送成功,等待响应"]]; }]; // 继续测试... }
在Report Navigator里展开对应的测试用例,就能看到名为「用户登录流程日志」的活动项,点击后就能看到你添加的自定义文本。
方法二:用断言附带日志(快速简便)
如果只是需要快速输出一段文本,也可以用始终通过的断言来实现,文本会直接显示在测试结果的详情里:
Swift 示例
XCTAssertTrue(true, "当前页面加载完成,元素数量:\(elementCount)")
Objective-C 示例
XCTAssertTrue(YES, @"当前页面加载完成,元素数量:%ld", (long)elementCount);
这种方式的日志会和测试用例的结果放在一起,适合简单的状态记录。
注意:Xcode 9已经完全支持这两种方法,不管是单元测试还是UI测试,真机运行时都能正常捕获到这些日志内容。
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

