XCTestCaseのセットアップ、ティアダウン、テストメソッド
setUp/tearDownを使ってテストクラスを構成し、テストメソッドに名前を付けます。
「XCTestCaseのセットアップ、ティアダウン、テストメソッド」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
XCTestCase の基本
XCTestCase は、すべての Swift 単体テストの基底クラスです。"test" で始まる各メソッドがテストケースになります。
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のセットアップ、ティアダウン、テストメソッド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「XCTestCaseのセットアップ、ティアダウン、テストメソッド」で何を学びますか?
setUp/tearDownを使ってテストクラスを構成し、テストメソッドに名前を付けます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「XCTestCaseのセットアップ、ティアダウン、テストメソッド」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- XCTestCaseのセットアップ、ティアダウン、テストメソッド
- XCTAssertファミリーとthrowingアサーション
- プロトコルベースのモックと依存性注入
- 非同期テストとパフォーマンス計測