XCTest — Swift 测试(iOS/macOS)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 XCTest,为什么需要它?

XCTest 是 Apple 内置的框架,用于对 Swift(iOS、macOS、watchOS、tvOS)应用程序进行单元测试、功能测试和性能测试。它类似于 Python 的 pytest 或 Java 的 JUnit 等库,但完全集成在 Xcode 和 Swift Package Manager 中。XCTest 能够自动检查单个函数、类、UI 组件和网络请求的正确性,这对于在开发原生应用时保持代码质量至关重要。

如何安装 XCTest?

XCTest 随 Xcode 一起提供,无需单独安装。要开始使用,只需在 Xcode 中创建一个新项目并添加测试目标(iOS 单元测试包或 macOS 单元测试包)。如果你使用 Swift Package Manager,只需在测试文件中添加依赖 import XCTest。要与 CI/CD(例如 GitHub Actions)集成,请添加脚本:xcodebuild test -scheme YourScheme -destination 'platform=iOS Simulator,name=iPhone 14'。

XCTest 的主要功能

  • 单元测试 — 使用 XCTAssert 检查单个方法和类。
  • 性能测试 — 通过 measure 测量代码块的执行时间。
  • UI 测试 — 通过 XCUIApplication 自动执行与界面的交互。
  • 异步测试 — 使用 XCTestExpectation 处理等待。
  • 参数化测试 — 使用不同输入数据运行同一测试(通过循环)。

Swift(iOS)代码示例

import XCTest

class CalculatorTests: XCTestCase { var calculator: Calculator!

override func setUp() { super.setUp() calculator = Calculator() }

override func tearDown() { calculator = nil super.tearDown() }

func testAddition() { let result = calculator.add(2, 3) XCTAssertEqual(result, 5, "预期结果为 5,实际得到 \\(result)") }

func testPerformanceExample() { measure { _ = calculator.add(1000, 2000) } }

func testAsyncNetwork() { let expectation = self.expectation(description: "数据加载") NetworkService.fetchData { data in XCTAssertNotNil(data) expectation.fulfill() } waitForExpectations(timeout: 5) }}

何时使用 XCTest?

XCTest 是所有商业 iOS/macOS 项目的必备工具,尤其是在团队协作或计划发布到 App Store 时。它有助于防止重构时的回归问题,加快代码审查速度,并自动化 UI 检查。对于测试网络请求和数据库操作,XCTest 可与模拟对象(例如 OHHTTPStubs)结合使用。如果你正在编写 Swift 库,XCTest 是事实上的标准,因为它完全支持 Xcode 和 Swift Package Index。

推荐