#19 Swiftで学ぶテスト(単体テスト)の基本

Swiftで関数を書いた後、それが正しく動くかをprintで確認するだけで済ませていませんか?この記事では、Swiftで書いたコードを自動でチェックする「テスト」の基本を解説します。

なぜテストを書くのか

コードを修正するたびに、関連する処理が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。特にアプリ開発では、画面を毎回操作して確認する手間を減らせます。

XCTestを使ったテストの書き方

Swiftでは標準のXCTestフレームワークがテストの定番です。Xcodeでプロジェクトを作る時に「テストを含める」を選ぶと自動で準備されます。

func add(_ a: Int, _ b: Int) -> Int {
    return a + b
}
import XCTest

class CalculatorTests: XCTestCase {
    func testAdd() {
        XCTAssertEqual(add(2, 3), 5)
    }
}

クラスをXCTestCaseを継承する形で作り、メソッド名をtestから始めるのが決まりです。XCTAssertEqual(実際の値, 期待値)という書き方で「等しいはず」を宣言します。

異常系もテストしておく

正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。

func testAddWithZero() {
    XCTAssertEqual(add(0, 0), 0)
}

テスト前後の共通処理をまとめる

複数のテストで共通する準備・後片付けの処理は、setUp・tearDownというメソッドをオーバーライドしてまとめられます。

class CalculatorTests: XCTestCase {
    var calculator: Calculator!

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

各テストの前にsetUpの中身が実行されるため、同じ準備コードを毎回書く必要がなくなります。

Swiftならではの注意点

Swiftはオプショナル型(値が無いかもしれないことを表す型)を多用する言語です。オプショナルを扱う関数では、値がnilの場合の挙動もテストしておかないと、実機やシミュレータで初めてクラッシュに気づく、ということになりがちです。XCTAssertNilやXCTAssertNotNilといった専用の確認方法も用意されているので活用しましょう。

まとめ

テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための土台になります。XCTAssertEqual・setUpから始めて、オプショナル型のテストにも意識を向けてみてください。

関連記事


本ページはプロモーションを含みます。

参考書籍(PR)

Swiftをもっと学びたい方には「これからつくる iPhoneアプリ開発入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本