XCTestCase 设置、清理与测试方法
使用 setUp/tearDown 组织测试类,并为测试方法命名。
XCTestCase 设置、清理与测试方法 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
XCTestCase 基础
XCTestCase 是所有 Swift 单元测试的基类。每个以测试前缀开头的方法都是一个测试用例。
import XCTest
final class MathTests: XCTestCase {
func testAddition() {
XCTAssertEqual(2 + 2, 4)
}
}setUp 和 tearDown
setUp() 在每个测试之前运行。tearDown() 在每个测试之后运行。请使用它们初始化共享状态并执行清理。
final class UserServiceTests: XCTestCase {
var sut: UserService!
override func setUp() {
super.setUp()
sut = UserService()
}
override func tearDown() {
sut = nil
super.tearDown()
}
}setUpWithError 和 tearDownWithError
setUp/tearDown 的可抛出错误版本:如果设置过程抛出错误,测试会自动标记为失败。
override func setUpWithError() throws {
sut = try UserService(config: loadTestConfig())
}
override func tearDownWithError() throws {
try sut.cleanup()
}类级别设置
class setUp() 和 class tearDown() 会在该类中的所有测试之前或之后各运行一次,适合用于开销较大的共享资源。
final class DBTests: XCTestCase {
static var db: TestDatabase!
override class func setUp() {
super.setUp()
db = TestDatabase.inMemory()
}
override class func tearDown() {
db.close()
super.tearDown()
}
}命名测试方法
请将测试命名为 test_methodName_condition_expectedResult,以提高可读性并生成清晰的失败消息。
func test_login_withValidCredentials_returnsUser() throws { ... }
func test_login_withInvalidPassword_throwsUnauthorized() throws { ... }addTeardownBlock
直接以内联方式注册每个测试专用的清理代码块,无需重写 tearDown。
func testCreateFile() throws {
let url = FileManager.default.temporaryDirectory.appendingPathComponent("test.txt")
addTeardownBlock { try? FileManager.default.removeItem(at: url) }
// ... test
}禁用测试
在测试方法前加上 _,或将其注释掉,即可跳过该测试。XCTest 还支持使用 XCTSkipIf 跳过测试。
func testExperimentalFeature() throws {
try XCTSkipIf(ProcessInfo.processInfo.environment["CI"] != nil, "Skip on CI")
// ... test
}测试方法不能抛出错误(Xcode 16 之前)
在较早版本的 Xcode 中,声明为 throws 的测试方法会通过 XCTAssertNoThrow 将错误作为测试失败传播出来。
func testDecode() throws {
let user = try JSONDecoder().decode(User.self, from: validJSON)
XCTAssertEqual(user.name, "Alice")
}显式使测试失败
调用 XCTFail("reason"),即可通过描述性消息强制测试失败。
func testCallback() {
var called = false
service.doWork { called = true }
if !called { XCTFail("Callback was never invoked") }
}测试计划
Xcode 测试计划允许您使用不同配置(语言、环境变量、检测器)运行相同的测试。
// File → New → Test Plan
// Add test targets and configure per-configuration env vars
// Useful for running localized UI tests or with Address Sanitizer并行测试
在 Xcode 方案设置中启用并行测试,即可并发运行测试类并缩短测试总耗时。
// Product → Scheme → Test → Options → Execute in parallel
// Each XCTestCase class runs in a separate process
// Ensure tests are independent and don't share global state快速检查
哪个 XCTestCase 方法会在该类中的所有测试之前运行一次,而不是在每个单独的测试之前运行?
课程回顾
重写 setUp/tearDown(或其可抛出错误的版本),以执行每个测试的设置和清理。使用 class setUp/tearDown 管理每个类只需初始化一次的资源。为测试命名时应清楚描述其用途。使用 addTeardownBlock 执行内联清理,并使用 XCTSkipIf 进行条件跳过。
常见问题解答
「XCTestCase 设置、清理与测试方法」课时是免费的吗?
是的 — 「XCTestCase 设置、清理与测试方法」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「XCTestCase 设置、清理与测试方法」这节课中我会学到什么?
使用 setUp/tearDown 组织测试类,并为测试方法命名。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「XCTestCase 设置、清理与测试方法」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- XCTestCase 设置、清理与测试方法
- XCTAssert 系列与抛出断言
- 基于协议的模拟与依赖注入
- 异步测试与性能测量