You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:19:33