如何为Notification Service Extension添加单元测试目标(含选项置灰方案)
给Notification Service Extension添加单元测试的解决办法
我懂你遇到的痛点——想给Notification Service Extension(简称SE)加单元测试,结果发现直接关联的选项是灰的,根本点不了。别慌,这里有两种亲测有效的方案,帮你搞定这个问题:
方案一:手动创建独立的单元测试目标
如果你的项目里还没有专门针对SE的测试目标,这个方法最直接:
- 打开Xcode,点击顶部菜单栏的
File > New > Target - 在弹出的窗口里选择
Unit Testing Bundle,然后点击「Next」 - 给测试目标起个清晰的名字(比如
NotificationServiceExtensionTests),注意不用管「Target to be Tested」里的灰掉选项,直接点「Finish」创建 - 接下来关联SE的代码:
- 选中刚创建的测试目标,切换到「Build Settings」标签页
- 搜索
Header Search Paths,点击+号添加SE所在的文件夹路径(比如用$(SRCROOT)/NotificationServiceExtension,根据你的实际目录调整),可以选择「Recursive」让Xcode自动查找子目录 - 搜索
Other Linker Flags,添加-ObjC,确保测试目标能正确链接SE的代码
- 现在你就可以在测试文件里导入SE的头文件(比如
#import "NotificationService.h"),编写测试用例了
方案二:复用现有单元测试目标(如果项目已有测试目标)
如果你的主App已经有单元测试目标,可以直接修改配置来支持SE的测试:
- 选中现有单元测试目标,进入「Build Settings」
- 搜索
Target Dependencies,点击+号,把你的Notification Service Extension目标添加进去 - 同样在
Header Search Paths里添加SE的目录路径 - 检查
Other Linker Flags里是否有-ObjC,没有的话加上 - 之后就能在现有测试文件里导入SE的代码,针对扩展逻辑写测试了
小提醒
SE是运行在扩展进程里的,有些主App里的API可能在SE环境下不可用。测试时尽量用依赖注入把外部依赖(比如网络请求、文件操作)隔离出来,这样测试会更稳定可靠。
内容的提问来源于stack exchange,提问作者david_miller_
相关产品推荐
相关产品推荐

