跳到主要内容

在 VS Code 里运行 XCTest 和 Swift Testing 单元测试

装快蝎插件后,iOS 单元测试和 UI 测试自动出现在 VS Code 测试资源管理器,XCTest、Swift Testing 都支持,在模拟器或 iPhone 上运行,失败标在出错行。

在 VS Code 里跑 iOS 单元测试,装上免费插件快蝎(KXApp)后打开 Xcode 工程,测试会自动出现在 VS Code 的测试资源管理器里,XCTest 和 Swift Testing 都支持。点一下运行按钮就在当前选中的模拟器或 iPhone 上执行,结果实时显示,失败的用例直接标在出错的那一行。这篇讲怎么找到测试、怎么运行、怎么看失败原因,以及跑不起来时怎么排查,截至 2026 年 10 月,适用 Xcode 16 及以上。

开始前准备:Mac 上已安装 Xcode,VS Code 里装好插件并打开了 Xcode 工程,步骤见快速开始。工程里要有测试 target;要运行,Scheme 的测试动作里还要勾选它(在 Xcode 的 Scheme 编辑器 › Test 里设置)。

在哪里找到测试

点活动栏的烧杯图标,打开 VS Code 的测试资源管理器。工程里所有测试 target 都会列出来(和 Scheme 无关),按 target › 类 › 方法分组,target 显示为「HelloKXTests 单元测试」这样的名字:

测试类型 在列表里显示为
XCTest 单元测试 XCTestCase 子类 › 以 test 开头的方法
Swift Testing @Test 函数;带显示名的用例显示它的名字
UI 测试 UI 测试 target 下的类和方法,和单元测试一样

打开测试源文件时,每个测试方法旁边的行号区也有一个运行按钮,运行后换成通过或失败的图标。

运行测试

  1. 在状态栏选好运行目标:模拟器或连着的 iPhone 都可以,UI 测试也能在真机上跑。
  2. 在测试资源管理器里点运行按钮:
    • 点某个方法旁边的按钮,只运行这一个测试;
    • 点类或 target 旁边的按钮,运行它下面的全部测试;
    • 点测试资源管理器顶部的按钮,运行全部测试。
  3. 运行过程中每个用例实时显示开始、通过或失败。

测试用的是当前选中的 Scheme,所以运行前确认状态栏里选的是包含这些测试 target 的 Scheme。

看失败原因

  • 失败的用例在测试资源管理器里标红,源码里出错的那一行会显示断言消息,例如 XCTAssertEqual failed: ("3") is not equal to ("4"),Swift Testing 则是 Expectation failed: (Counter.next(1) → 2) == 3 这样的消息;测试定义所在的行标「测试失败」。
  • 点失败的用例可以跳到出错的那一行。
  • 构建测试 target 时的编译错误进「问题」面板,xcodebuild 的完整输出在 VS Code 的「测试结果」面板。

修改代码后再点一次运行按钮即可,测试运行前会自动构建。

跑不起来时怎么排查

现象 处理
测试资源管理器里没有测试 确认打开的文件夹里有 .xcodeproj / .xcworkspace,活动栏出现了 Xcode 工程视图;工程里要有测试 target,再点测试资源管理器顶部的刷新按钮
运行时显示「测试未能构建或启动,详情见测试输出。」 常见原因是 Scheme 没有测试动作,具体原因看「测试结果」面板里 xcodebuild 的输出;在 Xcode 的 Scheme 编辑器 › Test 里加入测试 target,保存后回到 VS Code
测试在真机上跑不起来 按真机运行的前提检查:解锁、信任、开发者模式、签名,见真机运行与调试
编译失败 看「问题」面板的第一条错误;同一个 Scheme 在 Xcode 里按 ⌘U 能否通过,可以判断问题在工程还是在插件
测试结果和 Xcode 不一致 用 Xcode 工程视图标题栏「…」里的「清理构建目录」后重跑

更多见测试指南和问题排查。

常见问题

Swift Testing 和 XCTest 可以混在一个工程里吗?

可以。两种测试都会出现在测试资源管理器里,一起运行。

UI 测试能在 iPhone 真机上跑吗?

能。在状态栏选中连着的 iPhone 后运行 UI 测试即可,前提和真机运行 App 一样:手机已解锁、信任这台 Mac、开发者模式已打开、工程能为这台设备签名。

为什么测试列表是空的?

测试列表直接列出工程里的所有测试 target,和 Scheme 无关。列表为空时,确认工程里有测试 target、测试文件是 .swift / .m / .mm、测试类继承 XCTestCase 或用了 @Test,然后点测试资源管理器顶部的刷新按钮。Scheme 只影响运行:Scheme 没有测试动作时,运行会显示「测试未能构建或启动,详情见测试输出。」,xcodebuild 给出的原因在「测试结果」面板里。

运行测试前需要先手动构建吗?

不需要。点运行时会先构建测试 target,再执行测试。