Swift Testing

Swift Testingは直感的で表現力豊かなAPIを提供する新しいフレームワークで、Swiftコードのテストが簡単になります。

明確で表現力豊かなAPI

Swift Testingにはマクロを使用して構築された明確で表現力豊かなAPIが用意されているため、少ないコードで複雑な動作を宣言できます。#expect APIはSwiftの式と演算子を使用して、評価された値を取得するので、テストが失敗した場合も何が問題だったのかをすぐに理解できます。パラメータ化されたテストによって、一連の値に対して同じテストを実行できるため、より少ないコードで記述することができます。すべてのテストはSwiftの並行処理とシームレスに統合され、デフォルトで並列に実行されます。

@Test("Continents mentioned in videos", arguments: [
    "A Beach",
    "By the Lake",
    "Camping in the Woods"
])
func mentionedContinents(videoName: String) async throws {
    let videoLibrary = try await VideoLibrary()
    let video = try #require(await videoLibrary.video(named: videoName))
    #expect(video.mentionedContinents.count <= 3)
}

カスタムのテスト動作

コード内で特性を指定することで、テストやテストスイートの動作をカスタマイズできます。特性では、テスト実行時の条件(テストを実行するデバイスなど)を記述したり、テストを特定のオペレーティングシステムバージョンに限定したりできます。また、特性でテストの実行時間の制限を指定することで、継続的インテグレーションを効果的に活用できます。

@Test(.enabled(if: AppFeatures.isCommentingEnabled))
func videoCommenting() async throws {
    let video = try #require(await videoLibrary.video(named: "A Beach"))
    #expect(video.comments.contains("So picturesque!"))
}

簡単かつ柔軟な整理

Swift Testingには、テストを整理するためのさまざまな方法が用意されています。グループやサブグループの階層を利用して、関連するテストを構造化することができます。タグを適用することで、テストスイート全体で共通の特性を持つテスト(特定のデバイスを対象とするテストや特定のモジュールを使用するテストなど)を柔軟に管理、編集、実行できます。また、テストの内容が一目でわかるように、テストに説明的な名前を付けることもできます。

@Test("Check video metadata",
      .tags(.metadata))
func videoMetadata() {
    let video = Video(fileName: "By the Lake.mov")
    let expectedMetadata = Metadata(duration: .seconds(90))
    #expect(video.metadata == expectedMetadata)
}

パワフルなツール

Xcodeのすべてのワークフローで、テストやテストスイートを実施できます。豊富なテスト結果のインライン表示により、テストとその詳細な結果を並べて確認することができます。また、パラメータ化されたテストの特定の引数を再実行して、コードの動作をデバッグすることもできます。Xcode Cloudでテストを実行すると、並列化を活用して、結果の詳細な要約を受け取ることができます。またSwift Package Managerを使用して、コマンドラインから直接テストを実行することもできます。

オープンソース、クロスプラットフォーム

Swift Testingは、Appleプラットフォーム、Linux、Windowsを含む、Swiftがサポートするすべての主要なプラットフォームで動作するため、プラットフォーム間を移動する際にも、より一貫したテストを実行できます。これはオープンソースとして開発されており、今後の機能についてコミュニティの意見を取り入れています。どこからでも最高のアイデアを集め、Swiftにおけるテストの未来を形作ることができます。

XCTestとの連携

XCTestを使用して作成したテストがすでにある場合は、Swift Testingで記述した新しいテストと並べて実行することができます。そのため、テストの移行を自分のペースで段階的に進めることができます。

今すぐ始める

Xcode 16ベータ版をダウンロードし、Swift Testingフレームワークを使ってXcodeコードをテストしてみましょう。

Xcodeをダウンロードする