用途
iOS Testing Expert 是面向 iOS 应用的测试相关技能,提供 Swift 项目的综合测试模式与示例,覆盖 XCTest、XCUITest、Quick/Nimble 等测试框架。其定位是协助编写 iOS 测试、搭建测试基础设施,以及进行 Mock 等测试相关工作。
主要能力
测试金字塔
资料给出 iOS 测试的金字塔模型,由下至上分为三层:
- 单元测试(Unit)约占 70%:针对模型、工具类和纯逻辑。
- 集成测试(Integration)约占 20%:针对 ViewModel 与服务。
- 端到端测试(E2E,XCUITest)约占 10%:UI 测试与完整流程。
XCTest 基础
单元测试方面,示例展示了对 User 的 fullName 进行断言,以及使用 XCTAssertThrowsError 校验验证逻辑会抛出错误。异步测试方面,提供了两种写法:使用 async/await 直接等待 fetch 返回,以及通过 expectation(description:) 配合 wait(for:timeout:) 处理回调式异步。
XCUITest(UI 测试)
UI 测试示例以登录流程为例:在 setUpWithError 中设置 continueAfterFailure = false 并启动应用;测试内依次对邮箱、密码输入框执行点击与 typeText,点击登录按钮,最后使用 waitForExistence(timeout: 5) 断言欢迎文本出现。
Accessibility Identifiers
在 SwiftUI 视图中通过 .accessibilityIdentifier("email") 为元素设置标识,UI 测试中即可用 app.textFields["email"] 定位。
Quick/Nimble(BDD 风格)
资料给出在 Package.swift 中引入依赖的方式:
.package(url: "https://github.com/Quick/Quick.git", from: "7.0.0"),
.package(url: "https://github.com/Quick/Nimble.git", from: "13.0.0"),
BDD 测试使用 QuickSpec,以 describe、context、it 组织用例,配合 beforeEach 准备数据,并用 Nimble 的 expect(...).to(equal(...))、expect { ... }.to(throwError()) 等断言。
Mocking with Protocols
采用基于协议的依赖注入:定义 UserServiceProtocol,真实实现 UserService 负责网络调用,测试用 MockUserService 通过 mockUser 和 shouldFail 控制返回或抛错。示例展示了在 testViewModelLoadsUser 中将 Mock 注入 UserViewModel,调用 load() 后断言 viewModel.user?.name。
快照测试
使用 swift-snapshot-testing,对 SwiftUI 视图调用 assertSnapshot,以 .image(layout: .device(config: .iPhone13)) 的形式生成快照断言。
测试覆盖率
通过 xcodebuild 开启覆盖率并输出结果包:
xcodebuild test \
-scheme App \
-enableCodeCoverage YES \
-resultBundlePath TestResults.xcresult
查看报告:
xcrun xccov view --report TestResults.xcresult
使用方式
资料未提供安装或集成该技能的具体步骤,仅给出在 Swift 项目中编写测试与引入 Quick/Nimble 的方式。使用时可参照上述模式在 XCTest/XCUITest 测试目标中编写用例。
适用场景
- 编写 iOS 单元测试、UI 测试与集成测试。
- 搭建 iOS 测试基础设施。
- 在 Swift 项目中进行 Mock 与依赖注入。
- 需要 BDD 风格测试或快照测试时。
限制
资料未提供该技能的收费、价格、支持平台、许可方式等信息,暂未提供。