記事


テストをテスト計画に整理することでコード評価を改善します


テスト計画を作成および構成することで、ソフトウェアエンジニアリングプロセスのさまざまな段階であなたがテストから取得する情報を制御します。





概観


成熟したプロジェクトでは、様々なシナリオをカバーする多数のテストが効果的です。テストは、コードの動作を検証したり、パフォーマンスを測定したり、異なる製品をテストしたり、同じ製品を異なるターゲットや構成でテストすることができます。テストには、複雑なワークフローを実行する長時間実行される UI テストや、個々の関数を実行する小規模なユニットテストなどがあります。Testing を参照のこと。


ソフトウェアエンジニアリングのプロセスの様々な段階であなたのテストから取得する情報を制御し、これらのテストをテストプランに整理し、Xcode によるテストプランの実行方法を構成します。例えば、あるモジュールの開発とデバッグ中にそのモジュールのユニットテストのみを実行するテストプランを作成し、App Store にあなたのアプリを提出する前にすべてのユニットテスト、統合テスト、UI テストを実行する別のテストプランを作成するといったことが可能です。



Swift Testing では、共通の特性を持つテストを識別するための注釈である タグ を宣言してテストに追加できます。


タグを追加することで、以下のようなことを指定できます。


  • 優先度(重大、通常、低)

  • 種類(ユニット、統合、パフォーマンス)

  • cadence (頻度)(提出前、毎日、プレリリース)

  • 関数領域

  • 依存関係

  • Xcode 16 以降では、テストプランでタグを使用して、含めるテストを指定できます。タグの宣言とテストへのタグの追加の詳細については、テストへのタグの追加 (Adding tags to tests) をご覧ください。既存のユニットテストを Swift Testing に移行する方法については、XCTest からのテストの移行 をご覧ください。


    注意

    タグはテストスイートの代わりではありません。テストスイートはソースレベルでテスト関数に階層構造を付与しますが、タグは異なるファイル、スイート、ターゲットのテストを関連付けるのに役立ちます。



    テスト対象と製品を関連付けるスキームを作成する


    スキームは、ビルド、テスト、実行、分析、プロファイリング、アーカイブの各アクション(下図参照)を呼び出す際に、Xcode に特定のターゲットを使用するよう指示します。スキームのテストアクションには、テスト対象製品のターゲットと、その製品に関連するテストを含むテストターゲットを含めます。



    Xcode スキームを作成し、スキームにターゲットを割り当てる方法については、プロジェクトのビルドスキームのカスタマイズ (Customizing the build schemes for a project) を参照してください。


    静的ライブラリとウィジェット拡張機能を含む iOS アプリのように、あなたの製品が複数のターゲットを持つ場合は、リリースに適した製品全体をビルドする「アンブレラ」スキームに加えて、個々のターゲットごとにスキームを作成します。あなたのチームの開発者は、各ターゲットのタスクに取り組む際に、より具体的なスキームを使用し、そのターゲットに関連するテストのみを実行することで、より迅速なフィードバックを得ることができます。変更を統合する準備ができたら、アンブレラスキーム内のテストコレクション全体を実行することで、回帰が発生していないことをより確実に確認できます。



    スキームのテストを整理するためテスト計画を作成する


    テストプラン は、あなたの Xcode プロジェクト内のドキュメントであり、開発者がテストアクション (下の図を参照) を呼び出したときに Xcode が実行するテストと、テストの実行に使用する Xcode の構成について説明します。



    同じスキームに対して複数のテストプランを作成し、Xcode または Terminal からテストを実行する際に、それらのいずれかを使用できます。スキームのデフォルトプランとして、テストプランを 1 つ選択しなければなりません。明示的にテストプランが指定されていない場合、Xcode はこのプランを使用してテストを実行します。Xcode は、あなたのスキームによってビルドされたテストターゲットのすべてのテストを含むデフォルトのテストプランを作成します。



    このテストプランを編集するには、Product > Scheme > Edit Test Plan を選択します。Xcode はテストプランを保存する場所を尋ねます。


    追加のテストプランを作成するには:


    1. Product (製品) > Test Plan (テスト計画) > New Test Plan (新規テスト計画) を選択します。

    2. 新しいテスト計画の名前を入力します。

    3. テスト計画を保存する場所を選択します。

    4. Create (作成) をクリックします。

    現在のスキームのデフォルトのテストプランを選択するには:


    1. Product (製品) > Test Plan (テスト計画) > Manage Test Plans (テスト計画の管理) を選択します。

    2. 希望するテスト計画の隣にある Default(デフォルト) 列のラジオボタンを選択します。



    テスト計画にテストを含めるか除外するか


    使用すべきテストターゲットと、テストプランに含めるテストと除外するテストを決定するために Xcode が使用するタグを指定します。


    1. プロジェクトナビゲータでテストプランを選択します。

    2. テストペインで Choose Target (ターゲットを選択) をクリックし、テストターゲットをテストプランに追加します。

    3. タグが付けられたテストを含めるには、Include Tags (タグを含める) テキストフィールドをクリックし、1 つ以上のタグのシンボル名を入力します。フィルターボタンから Any Tag (任意のタグ) を選択すると、入力したタグのいずれかに一致するテストが含まれ、All Tags (すべてのタグ) を選択すると、すべてのタグに一致するテストが含まれます。

    4. タグが付けられたテストを除外するには、Exclude Tags (除外タグ) フィールドに除外するべきタグのシンボル名を 1 つ以上入力します。フィルターボタンから Any Tag (任意のタグ) を選択すると、入力したタグのいずれかに一致するテストが除外され、「すべてのタグ」を選択すると、すべてのタグに一致するテストのみが除外されます。


    すべてのあなたのテストをテスト計画に含めるには、Include Tags (タグを含める) と Exclude Tags (タグを除外する) フィールドを空のままにします。



    テスト計画で実行するテストスイートと関数を選択する


    与えられたテストプランに対して Xcode が実行するテストをさらに絞り込むには、テストプランのアウトラインビューで、項目の隣にある「含める」列のチェックボックスを選択します。「含めるタグ」および「除外するタグ」フィールドから、条件に一致する項目を選択または選択解除できます。これらの項目は、ターゲット、スイート、関数、およびパラメータ化されたテスト関数に渡される特定の入力パラメータを表します。Xcode は、タグのシンボル名を、タグが注釈を付けたスイートと関数の隣にある「タグ」列の下に表示します。項目の上にポインタを置くと、右矢印ボタンが表示されます。このボタンをクリックすると、ソースエディタにその項目のソースコードが表示されます。


    テストプランからテスト関数またはテストケースを除外すると、Xcode はそれらのテスト関数またはテストケースをスキップし、それらのステータスに関するフィードバックは提供しません。除外されたテスト関数がテストアクションの結果に影響を及ぼすのは、テストにビルドエラーが含まれている場合のみです。その場合、テストアクション全体が失敗します。


    Swift Testing と XCTest は、テストを実行しながら、テストアクションの結果への影響を変更する方法をサポートしています。Swift Testing では、特性を使用してテストを実行する実行時の条件を制御します。テストの有効化と無効化 (Enabling and disabling tests) と 既知の問題 (Known issues) を参照して、失敗が予想されるテストを指示してください。XCTest で実行プラットフォームまたは構成がテストに適していないためにテストをスキップするには、XCTSkipIf(_:_:file:line:) または XCTSkipUnless(_:_:file:line:) を使用します。XCTest でテストが失敗することが予想されることを示すには、XCTExpectFailure(_:options:) を使用して下さい。



    テスト計画の構成を調整する


    各テストプランには、Xcode にテストの実行時環境の設定方法を指示する 1 つ以上の構成が含まれています。テストプランエディタの "Configuration (構成)" タブ(下図参照)では、環境変数の設定、アドレスサニタイザーやメモリ管理ガードなどの追加チェックの有効化、コードの異なるローカリゼーション設定の選択などが可能です。



    テスト計画構成であなたが指定できる値は以下のとおりです。


    Arguments Passed on Launch(起動時に渡される引数)

    テスト対象製品へのコマンドライン引数。


    Environment Variables(環境変数)

    テスト対象製品の環境で設定される値。


    Target for Variable Expansion(変数展開のターゲット)

    Xcode がビルド設定を拡張する際にベースとして使用するターゲット。使用可能な設定の一覧については、ビルド設定リファレンス (Build settings reference) を参照してください。


    Application Language(アプリケーション言語)

    テスト対象製品のローカライズされた文字列に使用する言語。システム設定で指定された言語を使用する場合はシステム言語。


    Application Region(アプリケーション地域)

    テスト対象製品のロケール設定に使用する地域。システム設定で指定された地域を使用する場合はシステム地域。


    Simulated Location(シミュレートされた位置情報)

    テスト中に位置情報サービスを使用する際に返される位置情報です。場所を指定します。テスト実行中のデバイスの位置情報を使用する場合は「なし」、テスト中のルート移動をシミュレートする場合は GPX ファイルを使用します。


    Automatic Screen Capture(自動スクリーンキャプチャ)

    UI Automation テストランナーがテスト実行時にスクリーンショットをキャプチャするかどうか、またテストに合格したスクリーンショットを削除するかどうかを指定します。


    Preferred Capture Format(推奨キャプチャ形式)

    UI Automation テストランナーがビデオかスクリーンショットをキャプチャするかを指定します。


    Localization Screenshots(ローカライズスクリーンショット)

    ローカライズ担当者向けにアプリのスクリーンショットを収集します。詳細については、ローカライズ担当者向けのアプリのスクリーンショットの作成 (Creating screenshots of your app for localizers) を参照してください。


    Distribution(配布)

    テスト対象製品に使用する配布方法。


    Attachments(添付)

    テストの動作に関する補足情報を収集して添付します。詳細については、attachments を参照してください。


    Collect Test Diagnostics on Failure( 失敗時にテスト診断情報を収集)

    テストが失敗した場合、すべての状況で診断情報を収集するか、xcodebuild を使用したテスト時のみ収集するか、まったく収集しないかを選択します。


    Execution Order(実行順序)

    Xcode がテストをアルファベット順に実行するか、毎回ランダムに実行するかを制御します。ランダムな順序にテストを実行すると、テストの動作が他のテストで行われたアクションに依存している状況を発見できます。


    Test Timeouts(テストのタイムアウト)

    一定時間後にテストが自動的に失敗するかどうかを制御します。


    Default Test Execution Time Allowance(s)(デフォルトのテスト実行時間許容値)

    テストが自動的に失敗するまでのデフォルトの実行時間 (秒数) です。設定できる最小値は 60 秒です。executionTimeAllowance を呼び出すことで、個々のテストに対してこの設定を上書きできます。テストのタイムアウトが「いいえ」に設定されている場合、この値は無視されます。


    Maximum Test Execution Time Allowance(s)(最大テスト実行時間許容値)

    テストが自動的に失敗するまでの最大実行時間(秒数)です。設定できる最小値は 60 秒です。executionTimeAllowance を使用してテスト実行時間を延長した場合でも、最大テスト実行時間が経過するとテストはタイムアウトします。テストタイムアウトが「いいえ」に設定されている場合、この値は無視されます。


    Test Repetition Mode(テスト繰り返しモード)

    テストを 1 回実行するか、失敗するまで繰り返すか、成功するまで繰り返すか、あるいは指定した回数実行するかを選択します。


    Maximum Test Repetitions(テスト最大繰り返し回数)

    テストを繰り返し実行する最大回数。


    Relaunch Tests for Each Repetition(繰り返しごとにテストを再実行)

    テストを繰り返し実行するたびに Xcode が新しいプロセスを起動するかどうか。


    Code Coverage(コードカバレッジ)

    テスト実行中にコードカバレッジメトリクスを収集します。


    Address Sanitizer(アドレスサニタイザー)

    メモリへの境界外アクセス、解放後に使用されたメモリ、その他の不適切なメモリ使用を検出します。


    Thread Sanitizer(スレッドサニタイザー)

    スレッド関連の競合状態を検出します。


    Undefined Behavior Sanitizer(未定義動作サニタイザー)


    C プログラミング言語における未定義動作に関連する問題を検出します。


    Main Thread Checker(メインスレッドチェッカー)

    メインスレッドでのみ使用されるべき API をバックグラウンドスレッドで使用したことによる問題を検出します。


    Malloc Scribble(Malloc スクリブル)

    解放されたメモリに特定の値を書き込み、解放されたメモリの不正使用を検出します。


    Malloc Guard Edges(Malloc ガードエッジ)

    大規模な割り当ての前後にガードページを追加し、境界外メモリの使用の検出をサポートします。


    Guard Malloc(ガード Malloc)

    メモリアロケータの代替バージョンを使用し、不正なメモリ使用の検出を追加検出します。


    Zombie Objects(ゾンビオブジェクト)

    解放されたオブジェクトを、Objective-C のメッセージを受信したときにあなたのアプリをクラッシュさせるゾンビオブジェクトに置き換えます。


    Malloc Stack Logging(Malloc スタックのログ記録)

    メモリが割り当てられるたびに、関数の呼び出しスタックを記録します。



    アドレスサニタイザー、スレッドサニタイザー、未定義動作サニタイザー、およびメインスレッドチェッカーの詳細については、メモリ、スレッド、およびクラッシュの問題を早期に診断する (Diagnosing memory, thread, and crash issues early) を参照してください。


    追加のテスト計画構成を作成するには、「Add (追加)」ボタンをクリックして下さい。Xcode は、テスト計画で指定されたテストを、そのプランの各構成ごとに 1 回ずつ実行します。



    スキームにテスト計画を追加する


    テスト計画を一つ以上のスキームに関連付けることで、複数のスキームで同じ構成に含まれる同じテストスイートと関数を取得できます。既存のテスト計画をスキームに追加するには、以下の手順を実行します。


    1. 「Product(製品)」> 「Test Plan(テスト計画)」>「Manage Test Plan(テスト計画の管理)」を選択します。

    2. テスト計画リストの下にある「Add(追加)」ボタンをクリックします。

    3. 「Add existing Test Plan(既存のテスト計画を追加)」を選択します。

    4. スキームに追加したいテスト計画を選択します。


    Xcode のテスト計画で指定されたテストを実行する


    Xcode がテストアクションを実行すると、アクティブなテスト計画内のテストが、テスト計画内の各構成ごとに 1 回ずつ実行されます。アクティブなテストプランを設定し、そのプランで指定されたテストを実行するには、以下の手順を実行します。


    1. 「Product (製品)」>「Test Plan (テスト計画)」を選択します。

    2. 実行したいテスト計画を選択します。

    3. 「Product (製品)」>「Test (テスト)」を選択します。

    Xcode でのテスト結果の解釈についての詳細は、テストの実行と結果の解釈 を参照してください。



    コマンドラインからテストを実行する


    コマンドラインから特定のテスト計画を使用してテストを実行するには、使用するテスト計画の名前を明示的に指定しなければなりません。SampleApp のテスト計画を見つけるには、以下のコマンドを実行します。


    % xcodebuild -scheme SampleApp -showTestPlans

    「パフォーマンステスト」内のテスト計画で指定されたテストを実行するには、以下のコマンドを実行します。


    % xcodebuild -scheme SampleApp test -testPlan Performance\ Tests

    「My Config」という構成のみを使用して「パフォーマンステスト」テスト計画内のテストを実行するには、以下のコマンドを実行します。


    % xcodebuild -scheme SampleApp test -testPlan Performance\ Tests --only-test-configuration My\ Config

    「My Config」以外のすべての構成を使用して「パフォーマンステスト」テスト計画内のテストを実行するには、以下のコマンドを実行します。


    % xcodebuild -scheme SampleApp test -testPlan Performance\ Tests --skip-test-configuration My\ Config




    以下も見よ


    テスト開発


    あなたの Xcode プロジェクトにテストを追加

    あなたの関数内のロジックをテストし、統合の問題をチェックし、UI ワークフローを自動化し、パフォーマンスを測定するためのコードをビルドするテストターゲットを追加します。


    あなたの既存のコードベースを更新してユニットテストに対応する

    コンポーネント間の結合を排除することで、テストの適用範囲と信頼性を向上させます。


    あなたのテストでカバーするコードの範囲を決定する

    コードカバレッジを使用して、十分なテストが不足している領域に新しいテスト開発を集中させます。














    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ