iOS 单元测试怎么跑?用 KXApp 在 VS Code 里跑 XCTest 和 Swift Testing

写了一个测试类,按 Cmd+R 跑 App 一切正常,转头打开测试面板,里面空空如也。不是测试写错了,是 Scheme 里没勾测试 target。这个坑我第一次也踩过。

测试这块常见的卡点就几个:面板里找不到测试、单条测试点了没反应、真机上 UI 测试卡住。这篇用 KXApp 把 iOS 单元测试这条线走一遍,XCTest 和 Swift Testing 分别怎么被列出来,单条和整个类怎么运行,模拟器和真机有什么区别,失败了又该去哪一行看。

测试为什么没出现在面板里?

VS Code 活动栏里那个烧杯图标就是测试资源管理器。打开 iOS 工程,测试会按 target › 类 › 方法分组列出来,XCTest 的类和用例、Swift Testing 的 @Test 函数都在里面。

如果面板是空的,先别怀疑插件。去 Xcode 的 Scheme 编辑器里看一眼 Test 那一栏,测试 target 有没有勾上。没勾,测试压根不会进入运行计划,面板自然也不会列。新建或者复制 Scheme 之后,测试 target 未必会跟着带过来,得手动确认一遍。说实话,这一步很容易被忽略。

这个前提得记牢:测试用哪个 Scheme,那个 Scheme 就必须带测试动作。换 Scheme 之后发现测试没了,多半是新的 Scheme 没配测试 target。

测试面板认的是 Scheme 里的测试动作,不是测试文件放在哪个目录。 文件写好了、target 也建了,Scheme 没勾,还是跑不起来。

XCTest 和 Swift Testing 怎么被列出?

其实两种框架都在同一个面板里。XCTest 按类和方法列,Swift Testing 的 @Test 函数也会出现,带显示名的用例显示的是你写的名字,不是函数名,列表里看到的是那句人话,找起来比函数名直观。

列表里每个测试方法旁边有运行按钮,点一下就跑这一条。这个方法适合写测试的时候用:写一条、跑一条、看结果,不用每次都把整个 target 拉起来。

有个细节挺省事:测试方法旁边的行号区也能点运行,不用先切到测试面板再找。写代码和跑测试在同一个编辑器里,来回切窗口的次数少了很多。

单条、整个类、整个 target 怎么跑?

KXApp 把测试入口放在 VS Code 的测试资源管理器里,运行粒度分三档:单个方法、整个类、整个 target。点哪一档,就只跑哪一档,不会顺手把旁边的测试也带进去嘛。一个类里哪条挂了,面板会直接标出来,不用自己数。

跑测试用的是当前运行目标。状态栏或者 Xcode 工程视图里选的是模拟器,测试就在模拟器里跑;选的是连着 iPhone,就在真机上跑。运行过程中,每个用例会实时显示开始、通过或失败,不用等全部跑完才知道结果。

我自己的习惯是:改完一个方法,先跑这一条;这一条过了,再跑整个类;提交前把整个 target 跑一遍。先跑一条,再跑一类,别一上来就全量。 全量跑一次要等一会儿,中间错一条,前面的结果也白等了。

模拟器和真机,测试在哪边跑?

测试跟着当前运行目标走。模拟器启动快,适合日常写测试;真机更接近实际环境,涉及性能、权限、硬件能力的用例,还是得在真机上过一遍。相机、推送、生物识别这些,模拟器给不了真实结果。

UI 测试也在同一个面板里,真机上同样能跑。第一次在真机上跑之前,手机要解锁、信任这台 Mac、打开开发者模式,还要让 Xcode 准备过这台设备。没准备过的设备,第一次启动会慢很多(别问我怎么知道的),等 Xcode 的 Devices and Simulators 跑完一次,后面就正常了。

切换运行目标不用改测试代码,状态栏里换一台设备就行呢。换完之后重新点运行,测试会在新的目标上再跑一遍。

失败在哪一行看?

失败的用例会标在出错的那一行,旁边带上断言消息。点一下就能跳到对应的代码,不用在输出里翻半天,省得折腾。断言消息写得具体一点,失败时能少翻一次代码。

测试面板里展示的是用例结果,App 自己的 print、NSLog 输出在「输出 › kxapp Console」里。两边的信息别混着看:断言失败看测试面板的行标记,App 运行时的问题看 Console。

如果一条测试一直通过,但你怀疑它根本没执行,先看面板里的运行状态,再看 Scheme 的测试动作。测试被跳过的时候,面板有时候不会给出很明显的提示,得自己确认一遍。

UI 测试有什么额外条件?

UI 测试和单元测试在同一个面板里列出,运行方式也一样。区别在于它会真的把 App 拉起来,在界面上点按、输入、断言,跑一条比单元测试慢不少。

条件还是那几个:测试 target 要进 Scheme 的测试动作,运行目标要能装 App,真机要解锁并信任。UI 测试跑失败的时候,先区分是断言不通过,还是 App 根本没启动起来------后一种去看 kxapp Console,多半能找到启动失败的原因。

Xcode 的 Test Navigator 排布和 VS Code 这边很像,测试动作、Scheme、测试计划这些配置还是得在 Xcode 里做。用它跑测试也很顺,尤其是你本来就开着 Xcode 的时候,大概顺手就跑了。覆盖率这些配置,还是在 Xcode 里看更全。

xcodebuild test 适合无人值守的场景:CI 里跑全量测试、生成结果、失败就断构建。它不需要编辑器,也不需要人盯着,和 VS Code 里的交互式运行是两回事。

KXApp 站的是编辑器这一侧:写代码和跑测试在同一个窗口里,当前运行目标切一下就能换设备,单条测试点一下就跑。它不替代 CI,也不负责测试计划的管理;日常开发里的红绿循环,用它比较顺手。顺便说一句,插件免费、不用注册,也不上传代码,这点对不想把工程交给外部服务的团队还挺重要。

先把一条测试跑顺

顺序可以这么来:先在 Xcode 里确认 Scheme 带了测试动作,回到 VS Code 打开测试面板,找一条最简单的用例跑通;再跑整个类,切到真机上跑一遍;UI 测试留到后面,等单元测试稳定了再上。第一次跑测试别急着上 UI 测试,单元测试跑顺了,UI 测试的失败才好判断是界面问题还是环境问题。

iOS 单元测试这件事,工具只是把入口搬到 VS Code 里,测试本身还是得写。反正测试这东西,跑起来才有意义,先把一条跑顺,再谈覆盖率和 CI 吧。

相关推荐
2501_915921431 小时前
iOS 实时日志怎么看?KeyMob 的日志过滤、崩溃报告与符号化
android·ios·小程序·https·uni-app·iphone·webview
天蒙蒙亮1 小时前
打ios app包+“应用商城”发布
ios
东坡肘子2 小时前
当应用不再属于特定操作系统 -- 肘子的 Swift 周报 #159
人工智能·swiftui·swift
小豆庄16 小时前
视频素材处理时的隐私盲区:云处理与本地处理的边界在哪
数据库·图像处理·视频·敏捷流程
VicLi18 小时前
把常用 iOS 调试操作放进一个 macOS 控制台: iCATBox
ios
茶底世界之下19 小时前
雾景需要更强反差吗?用 Awaking 检查树影与雾气的平衡
ios
golang学习记20 小时前
VS Code Agents新特性:标签页式工作区选择器
vscode
NoteDeep 深度笔记21 小时前
排期看不出冲突?把任务表切成甘特图
笔记·个人开发·甘特图·笔记应用·深度笔记·云笔记
终端安全笔记21 小时前
下一个大版本要动的三处:更新指令、传输要求、策略写法
网络安全·ios·1024程序员节·移动设备管理