iOS開発をしていると、「テストコードを書かないと…」と思いながら、つい先延ばしにしてしまいますよね。いざXCTestを開いても、何から始めればよいのか分かりにくいものです。
結論から言うと、最初のテストはGiven-When-Thenの3行から始めれば大丈夫です。準備し、実行し、検証する。この順番に慣れれば、あとは自然についてきます。
今日はXCTestの基本を押さえながら、このパターンで本当の最初のテストを書いてみましょう。
XCTestとはいったい何ですか?
XCTestは、AppleがXcodeに標準搭載しているテストフレームワークです。別途インストールする必要はなく、すぐに使えます。
プロジェクト作成時に「Include Tests」にチェックを入れるだけで、テストターゲットが自動的に作成されます。
要点だけ押さえておきましょう。
- XCTestCase:テストを格納するクラスです。これを継承して始めます。
- testで始まるメソッド:関数名がtestで始まると、Xcodeが自動的にテストとして認識します。
- XCTAssert系:結果が正しいか検証する関数群です。
最初はこの3つだけ知っていれば十分です。
実行も簡単です。テストメソッド左側のダイヤモンドボタンをクリックするか、Command + Uを押すと、すべてのテストが実行されます。
Given-When-Thenとは?
テスト初心者が最も迷うのは、「コードはどの順番で書けばいいの?」という点です。
Given-When-Thenは、その順番を決めるパターンです。3つのかたまりに分けて考えれば大丈夫です。
- Given(準備):テストに必要な値と状態を作る
- When(実行):検証したい動作を1回だけ実行する
- Then(検証):結果が期待どおりか確認する
日常の言葉にするとこうです。「カートにリンゴが2個入っているとき(Given)、支払額を計算したら(When)、2,000ウォンになるはず(Then)」。
準備し、実行し、検証する。この3拍子がGiven-When-Thenのすべてです。
このように分けて書くと、あとでテストが失敗したとき、どの段階に問題があるのかすぐ分かります。準備が間違っているのか、実行結果が誤っているのかを一目で把握できます。
初めてのテストを実際に書いてみましょう
簡単な電卓を例にします。2つの数を足すadd関数があると仮定します。
まず、テスト対象のコードです。
struct Calculator {
func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
}
では、Given-When-Thenの順番でテストを書いてみます。コメントで3つの段階を示しておくと、ずっと読みやすくなります。
func testAddTwoNumbers() {
// Given: 電卓と入力値を準備
let calculator = Calculator()
// When: 足し算を実行
let result = calculator.add(2, 3)
// Then: 結果を検証
XCTAssertEqual(result, 5)
}
XCTAssertEqualは、2つの値が等しいか比較する関数です。resultが5でなければテストは赤で失敗し、5なら緑で成功します。
最初に緑のランプが点いたときの気持ちは、今でも覚えています。大したことではないのに、妙に誇らしかったものです。
よく使うXCTAssertのまとめ
XCTAssertEqualだけ知っていれば始められますが、状況に応じて使い分けるとコードがずっときれいになります。よく使うものを表にまとめました。
| 関数 | 使う場面 |
|---|---|
| XCTAssertEqual(a, b) | 2つの値が等しいか |
| XCTAssertTrue(条件) | 条件が真か |
| XCTAssertFalse(条件) | 条件が偽か |
| XCTAssertNil(値) | 値がnilか |
| XCTAssertNotNil(値) | 値がnilでないか |
失敗時にメッセージを残したい場合は、最後の引数に文字列を入れます。たとえばXCTAssertEqual(result, 5, “足し算の結果が間違っています”)のように書きます。
初心者からよくある質問
Q. テストファイルはどこに置きますか? A. プロジェクトのTestsフォルダ内に置けば大丈夫です。実行するにはテストターゲットに含まれている必要があります。
Q. Whenは必ず1行で書く必要がありますか? A. 1行である必要はありません。ただし、検証する動作は1つだけ実行するのがおすすめです。1つのテストで1つのことだけを検証すれば、失敗の原因が明確になります。
Q. テスト関数の名前はどう付けますか? A. testで始めたうえで、testAddTwoNumbersのように何を検証するか分かる名前にするのがおすすめです。
今日はXCTestの基本とGiven-When-Thenパターンで、最初のテストを書きました。準備し、実行し、検証する。この3拍子だけ覚えておけば大丈夫です。
完璧なテストを書こうと気負わず、今日はadd関数1つから緑のランプを点けてみてください。その小さな成功が、次のテストにつながります。応援しています!

