🧑🏻‍💻

Xcode、Swift でのユニットテストの始め方

2024/03/16に公開

この記事について

SwiftUI での TDD (テスト駆動開発)を学習する最初のステップとして、Xcode でのユニットテストの作り方などをメモ。

Xcode、Swift でのユニットテストの始め方

新規プロジェクトの作成時に "include test" を選択してプロジェクトを」作成する。

プロジェクト内に "(プロジェクト名)Test"フォルダと、"(プロジェクト名)Tests.Swift" ファイルが作成される。これが Unit テスト用のフォルダとファイル。
(その下の UITests のフォルダとファイルは UI テスト用なので今は無視。UI テストを停止する方法はこの記事の後ろの方に記載)

"(プロジェクト名)Tests.Swift" ファイルの中身は以下のようになっている。(コメント部分は省略のため修正した)

import XCTest
@testable import FirstDemoProject

final class FirstDemoProjectTests: XCTestCase {

    override func setUpWithError() throws {
        // テスト実行前の処理を書く
    }

    override func tearDownWithError() throws {
        // テスト終了後の処理を書く
    }

    func testExample() throws {
        // ここに Unit テストを書く
    }

    func testPerformanceExample() throws {
        // パフォーマンステストを書く部分
        self.measure {
            // ここにパフォーマンステストを書く
        }
    }

}

最初に作成されているこのファイル他に、新規に "Unit Test Case Class" を作成した場合も基本的に同じ物ができるが、次節の「2点目: プロジェクト本体のインポート」の部分、 @testable import FirstDemoProject の部分が抜けているので注意。

ユニットテストに最低限必要な4点

ユニットテストを行うためにまず最低限必要なのは以下の4点のみ。

import XCTest // 1点目: XCTest のインポート
@testable import FirstDemoProject // 2点目: プロジェクト本体のインポート

final class FirstDemoProjectTests: XCTestCase { // 3点目: XCTestCase を引き継いだテストクラス

    func testExample() throws { // 4点目
        // ここに Unit テストを書く: 先頭が test で始まるテストを書く
    }

}

1点目: XCTest のインポート

XCTest フレームワークのインポート。

2点目: プロジェクト本体のインポート

@testable キーワードをつけてプロジェクトの本体にテストがアクセスできるようにする。

3点目: XCTestCase を引き継いだテストクラス

XCTestCase を引き継いだクラスを作成して、この中にテストを書いていく。

4点目: 先頭が test で始まるテストを書く

test で始まるものだけが XCode でテストとして認識される。

テストの実行方法

例えば以下のようにして

import XCTest
@testable import FirstDemoProject

final class FirstDemoProjectTests: XCTestCase {

    func testExample() throws {
        XCTAssertEqual(1, 2) // このテストは失敗する
    }

}
  • [command(⌘)] + [U]、または、
  • [Product] - [Test]
    でテストを実行する。
    以下のようにテスト結果が表示される。

UIテストが実行されないようにする

デフォルトの状態だと、テストを実行すると UIテストも実行されてしまい時間がかかるので、UIテストが実行されないようにしておくと良い。



Discussion