記事


テストの実行と結果の解釈


テストを実行し、結果を理解することで、プロジェクトのコードが期待どおりに動作するかどうかを判断します。





概観


ソフトウェア開発ワークフローの様々な段階で、テストのサブセットを実行したくなるでしょう。


  • 特定の関数または型に変更を加える際は、そのユニットに関連するテストのみを実行することで、変更の状態に関するフィードバックを最も迅速に得ることができます。

  • 変更内容がコードレビューまたは統合の準備ができたら、影響を受けるターゲットのすべてのテストを実行することで、予期せぬ回帰を発見できる可能性があります。

  • 最後に、Xcode Cloud は、複数の構成を使用して完全なテストセットをスケジュールに従って実行できるため、多数のテストを完了するために必要な実行時間の増加を管理しながら、あなたのコードの正確性に対する信頼性が向上します。


  • テスト計画からテストを実行する


    アクティブなテスト計画内のすべてのテストを実行するには、Xcode で実行するか ([Product (製品)] > [Test (テスト)] を選択)、ターミナルで xcodebuild コマンドを実行するという 2 つのオプションがあります。


    % xcodebuild test -scheme SampleApp

    Xcode ターゲットのスキームのテスト計画を編集することで、このアクションを実行したときにテストランナーが実行するテストを構成します。詳細については、プロジェクトのビルドスキームのカスタマイズ (Customizing the build schemes for a project) を参照してください。あなたのビルドスキームに複数のテスト計画が含まれている場合は、「Product (製品)」>「Test Plan (テスト計画)」を選択して、実行するテスト計画を選択します。テストナビゲータで、アクティブな計画を表示するには、「View (表示)」>「Navigator (ナビゲータ)」>「Tests (テスト)」を選択します。別のテスト計画または別のビルドスキームを選択すると、テストナビゲータが更新され、その計画が表示されます。計画のアウトラインビューを展開すると、それに含まれるターゲット、スイート、テスト関数、およびパラメータ化されたテストケースが表示されます。無効にした項目、またはスキップするようにマークした項目は淡色表示されます。



    テスト結果を解釈する


    テストを実行すると、Xcode はテストナビゲータのテスト計画の隣とアウトラインビューの各項目の隣にステータスアイコンを表示します。



    可能な状態は以下のとおりです。


    テストは合格しました。
    テストは失敗しました。失敗するはずのテストが失敗しなかったことが原因である可能性もあります。
    テストはいくつかの予想通りの失敗で失敗しましたが、予想外の失敗はありませんでした。
    Xcode がテストをスキップしました。
    マイナス記号 (–) の付いた緑色のアイコンは、テストの結果が混在していることを示します。一部のテスト関数またはパラメーター化されたテストケースは成功しましたが、その他は予想どおりに失敗したか、スキップされました。
    マイナス記号 (–) の付いた赤いアイコンは、テストの結果が混在していることを示します。一部のテスト関数またはパラメーター化されたテストケースは失敗しましたが、その他は予想どおりに失敗するか、スキップされました。

    注意

    Swift Testing と XCTest は、スキップするテスト、または既知の問題により失敗すると予想されるテストを識別する方法をサポートしています。Xcode に表示されるステータスアイコンは、上記の表に示されているように、この状態を反映しています。Swift Testing を使用して既知の問題をマークし、テストを有効にする方法については、既知の問題 (Known issues) と テストの有効化と無効化 (Enabling and disabling tests) を参照してください。XCTest を使用して失敗すると予想されるテスト関数を特定するには、XCTExpectFailure(_:options:) を呼び出します。テスト関数をスキップするには、XCTSkipIf(_:_:file:line:) または XCTSkipUnless(_:_:file:line:) を呼び出します。これらの関数は、XCTSkip インスタンスを生成します。


    テストナビゲータで項目をクリックすると、ソースエディタにテストの実装が表示され、特定のテストの失敗やスキップされたテストの詳細情報にアクセスできます。テスト実装の横のガターに同じステータスアイコンが表示されるため、ソースエディタで失敗箇所をあなたは特定しやすくなります。デバッグメッセージの隣にあるダイヤモンドのアイコンをクリックすると展開され、失敗の原因となった条件についてデバッグメッセージの内容を確認できます。



    Swift Testing で記述したテスト関数は、期待値マクロに渡す式で使用する変数と、テストランナーがテスト関数に渡す入力パラメータの状態をキャプチャします。これらの値を調べて失敗の原因をさらに理解するには、デバッグメッセージの下部にある「Show (表示)」ボタンをクリックし、「Result (結果)」領域と「Argument (引数)」領域を展開して、期待値式と入力パラメータの状態を確認してください。





    テストレポートでの追加情報にアクセスする


    テストを実行するたびにテストレポートが生成されます。これらのレポートは、Xcode のレポートナビゲータで「View (表示)」>「Navigator (ナビゲータ)」>「Report (レポート)」を選択し、ビルドスキーム名の下にある「テスト」アクションを選択すると表示されます。


    テストレポートのトップレベルには、実行したテストの高レベルの概要が表示されます。重要なパターンの失敗情報やスクリーンショットなどが強調表示されるため、調査をどこから開始すればよいかを判断するのに役立ちます。


    さらに詳しい情報は、レポートの追加セクションでご覧いただけます。


    Insight (洞察)

    複数の構成と実行先にわたる結果を分析中に見つかった一般的な障害パターンと長時間実行テストを報告します。


    Coverage (適用範囲)

    あなたのテストのコード適用範囲レポート。コード適用範囲の詳細については、あなたのテストでカバーするコードの範囲を決定する をご覧ください。


    Tests (テスト)

    テスト計画、テストタイプ、テスト関数別に整理されたあなたのテストの結果を表示するアウトラインビュー。


    Log (ログ、記録)

    アプリとテストのインストールプロセス、起動アクション、テストアクション、コードカバレッジレポートの生成などのテスト後のプロセスについてシステムが生成したログ (記録)。


    Build (ビルド)

    あなたのターゲットのビルド中にビルドシステムが生成するログを記録します。


    ターミナルで xcodebuild を使ってテストを実行すると、コマンドによりセッション結果、コードカバレッジ(有効な場合)、その他のログを含む Xcode テスト結果(.xcresults)バンドルが出力されます。このファイルは Xcode で開いて閲覧したり、あなたの開発チームの他のメンバーと共有したりできます。



    単一のテスト関数を実行する


    Xcode で実行したいテスト関数を含む Swift ファイルに移動します。エディタのガターにある関数宣言の横にあるダイヤモンドアイコンにポインタを移動し、灰色の再生アイコンをクリックします。



    または、Xcode テストナビゲータでポインターをテスト関数名の上に移動しテスト関数を見つけ、再生アイコンをクリックします。



    Xcode は選択されたテスト関数を実行し、結果を示すアイコンを更新します。


    ターミナルで単一のテスト関数を実行するには、xcodebuild を実行し、-only-testing オプションへのパラメータとしてテスト関数の識別子を指定します。テスト関数の識別子は、test_target/test_type/test_function という形式です。


    % xcodebuild test -scheme SampleApp -only-testing SampleAppTests/SampleAppTests/testEmptyArrayWhenNoOverlappingNotes


    特定の入力でパラメータ化されたテスト関数を実行する


    パラメータ化されたテスト関数の隣にある再生アイコンをクリックすると、そのテストのすべてのテストケースが実行されます。実行する特定のテストケースを選択するには、テストナビゲータでテスト関数名の前の展開矢印をクリックし、特定のテストケースの横にあるダイヤモンドアイコンにポインターを移動して、灰色の再生アイコンをクリックします。



    パラメータ化をサポートする @Test マクロに 1 つ以上のコレクションを渡すと、マクロは各要素または要素ペアごとにテストケースを生成します。各テストケースは、テストランナーがテスト関数に渡す入力パラメータの一意のセットを表します。1 つ以上の入力でテストが失敗した場合、対応する診断によってどの入力を検査すべきかが示されます。特定のテストケースを選択すると、そのケースの入力のみを使用してテスト関数が実行され、デバッグ時に役立ちます。パラメータ化されたテストの実装の詳細については、パラメータ化されたテストの実装 (Implementing parameterized tests) を参照してください。


    テスト関数のグループを実行する


    共通の型またはスイートで定義されたテスト関数を実行するには、エディターのガター内の型の宣言の横にあるダイヤモンドアイコンにポインターを移動し、灰色の再生アイコンをクリックします。Swift Testing では、テストスイート とは、1 つ以上のテスト関数の定義を含む任意の型を指します。



    あるいは、Xcode テストナビゲータから一連のテスト関数を実行するには、ナビゲータにリストされている計画、ターゲット、またはスイートの上にポインターを移動し、灰色の再生アイコンをクリックします。



    テストスイートをネストし、必要に応じて @Suite マクロで注釈を付けることで、スイートに含まれるテスト関数に関する追加情報を提供できます。詳細については、スイートの型によるテスト関数の整理 をご覧ください。


    XCTest では、あなたのすべてのテスト関数を XCTestCase のサブクラスに実装します。詳細については、テストケースとテストメソッドの定義 (Defining Test Cases and Test Methods) を参照してください。


    Xcode は選択した項目に含まれるテスト関数を実行し、結果を示すアイコンを更新します。


    ターミナルでテストケース内のテスト関数を実行するには、xcodebuild を実行し、-only-testing オプションへのパラメータとしてスイートの識別子を指定します。スイートの識別子は test_target/test_suite という形式です。


    % xcodebuild test -scheme SampleApp -only-testing SampleAppTests/SampleAppTests


    タグ別にテストを表示および実行する


    Swift Testing では、tags(_:) の特性を使用して、関連するテストのグループに注釈を付けることができます。これらの追加グループは、テストナビゲータの「Tag (タグ)」セクションのアウトラインビューで確認できます。テストナビゲータ上部のタグアイコンをクリックすると、タグ別に整理されたテスト関数が表示されます。タグの宣言とテストへのタグの追加の詳細については、テストへのタグの追加 (Adding tags to tests) を参照してください。


    タグに関連したすべてのテスト関数、またはタググループ内の単一のテスト関数を実行するには、タグまたはテスト関数の上にポインターを移動し、灰色の再生アイコンをクリックします。



    信頼性を判断するためにテストを繰り返し実行する


    テスト関数またはテストスイートの型の隣にあるダイヤモンドアイコンを Ctrl + クリックし、「繰り返し実行」を選択します。表示されるパネルで、テストの実行を停止するタイミングを選択します。以下のオプションがあります。


    失敗後に停止

    最初の失敗が発生するか、最大繰り返し回数に達するまでテストを実行します。


    成功後に停止

    テストが初めて成功するか、最大繰り返し回数に達するまでテストを実行します。


    最大繰り返し回数後に停止

    結果に関係なく、指定された回数だけテストを実行します。


    テストを繰り返す最大回数、テストが失敗した場合に実行を一時停止するかどうか、そして繰り返しごとにテストランナーを再起動するかどうかを選択します。最後に「Run (実行)」をクリックすると、テストが繰り返し実行されます。



    ターミナルでテストを繰り返し実行するには、-test-repetitions オプションを使用して繰り返し回数を指定します。オプションで、テストを成功または失敗するまで繰り返すかどうか、繰り返しごとにテストランナーを再起動するかどうかも指定します。


    % xcodebuild test -scheme SampleApp -only-testing SampleAppTests/SampleAppTests/testEmptyArrayWhenNoOverlappingNotes -run-tests-until-failure -test-iterations 20













    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ