Swift Testing参数化测试仅执行首个参数问题排查
Swift Testing参数化测试仅执行首个参数的问题解决
你的测试代码写法基本正确,但有几个关键细节需要调整,才能让所有参数对应的测试用例全部运行:
1. 确保参数类型支持序列化
Swift Testing的参数化测试要求参数类型符合Codable协议,测试运行器需要通过序列化参数来生成独立的测试用例。虽然CNAuthorizationStatus作为基于Int的枚举默认会自动实现Codable,但显式扩展可以避免潜在的序列化异常:
import Contacts extension CNAuthorizationStatus: Codable {}
2. 给每个参数化测试用例设置唯一标识
在@Test的名称中嵌入参数信息,让Xcode能识别出多个独立的测试用例,同时也方便你区分不同参数的测试结果:
@Test("Test fetch contacts with insufficient permissions: \(status)", arguments: [ CNAuthorizationStatus.denied, CNAuthorizationStatus.restricted, CNAuthorizationStatus.notDetermined ]) func fetchContacts_insufficientPermissions(status: CNAuthorizationStatus) throws { dependencies.contactStore.currentAuthStatus = status var receivedPermissionsError = false /// Do some work to trigger permissions error. #expect(receivedPermissionsError == true) }
3. 正确触发全量测试
在Xcode的测试导航栏中,你的测试函数会展开显示三个子测试用例(对应三个参数),请点击父级测试函数的运行按钮,而不是单个子测试用例的按钮,这样才会执行所有参数对应的测试逻辑。
4. 确认Xcode版本要求
Swift Testing框架是Xcode 15.0及以上版本才引入的功能,如果你使用的是旧版本Xcode,参数化测试无法正常工作,请升级到Xcode 15+。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

