単体テスト(テストケースエディター スタブの制御)

本章では、テストケースエディターとスタブ機能を使用し、インポートした"Sensor"プロジェクトのソースファイルである"sensor.c"に実装されている"int addSignals()"関数が仕様に則って動作するかをテストする手順を記載します。
テスト対象関数である"int addSignals()"関数は下記のような仕様となります。

  • 外部関数である"needCompensation()"の戻り値が"0"以外の場合、引数の"signalA"、"signalB"、および"calcCompensation()"関数の戻り値を加算した値を返します。

  • 外部関数である"needCompensation()"の戻り値が"0"の場合、引数の"signalA"、"signalB"を加算した値を返します。

今回の単体テストには、テスト対象関数でコールしている関数に未実装の外部関数が含まれるため、単体テストの手順にスタブを作成する手順を加えて実施します。

このページの内容:

単体テスト対象のソースに対してテストスイートを作成

  1. テスト対象のソースファイル"sensor.c"を選択し、 青色の三角のボタンの右側にある▼ボタンを選択します。

  2. 展開されたメニューから[テストの実行] > [ユーザー定義] > [Unit Testing] > [01.テストスイート作成]を実行します。

  3. テストコンフィギュレーションが正常に完了することを確認します。

単体テスト対象のソースに対してシンボル情報を収集

  1. [Parasoft]メニュー> [ビューを表示] > [スタブ]を選択します。



  2. [スタブ]ビューが表示されます。

  3. テスト対象ソースファイルを選択し、 青色の三角のボタンの右側にある▼ボタンを選択します。

  4. [テストの実行] > [ユーザー定義] > [Unit Testing] > [File Scope] > [02.シンボル情報収集(File Scope)]メニューを選択します。

  5. シンボルデータが[スタブ]ビューに表示されます。 表示されたシンボルに対し、コンテキストメニューからスタブを作成できます。

スタブの作成

  1. [スタブ]ビューから、[定義]が[なし]となっているシンボルを選択後、右クリックし[自動スタブの作成] を選択します。

  2. スタブが作成されます。デフォルトでは空関数(戻り値がある場合、0を返す)となります。 



テストケースの作成

  1. [テストケース エクスプローラー]から、テストケースを追加するテストスイートを選択し右クリックします。

  2. [新規追加] > [エディターを使用したテストケース…]メニューを選択します。


  3. [テスト ケース名]に、"test_addSignals_editor"を入力した後、[OK]を選択します。

     

  4. 表示されるエディター画面上の[次のテスト ケースを作成]ドロップダウンメニューを選択します。

  5. ドロップダウンメニューから" int addSignals (int, int, int)"を選択し、右側のボタンを押下します。

     

  6. データソースの選択で、[外部データ ソース]を選択します。

  7. データソースの設定内容を示すウィンドウで[OK]を選択します。

  8. ご利用のPCでcsvを開くアプリケーションが起動します(今回はExcelを例にしております)。


テストデータを編集

  1. テストデータを追加します。


  2. 変更を保存します。

  3. エディターの中で、Ctrl + Sキーを押下しテストケースを保存します。

単体テストを実行

  1. [テストケース エクスプローラー]からテストケースを選択し、 青色の三角のボタンの右側にある▼ボタンを選択します。

  2. [テストの実行] > [ユーザー定義] > [Unit Testing] > [File Scope] > [03.単体テスト実行 (File Scope)]メニューを選択します。

単体テストの結果を確認

  1. [テストケース エクスプローラー]から結果を確認できます。


  2. ソースファイル上に、カバレッジ結果が実行箇所:緑色 / 未実行箇所:赤色でハイライトされます。

テストデータを編集して単体テストを実行 – スタブの戻り値を変更する –

前回の単体テストのカバレッジ結果より、実施したテストでは、"needCompensation()"関数が"0"以外を返した場合のテストができていないことがわかります。本章では、作成したスタブの振る舞いを設定して、"needCompensation()"関数の戻り値を変更するテストを行います。

  1. テストデータに、SV#I#_needCompensation列を追加します。

  2. テストデータを追加し保存します。


  3. テストケースエディターに戻り、[パラメーター]欄の右側にある[列名の更新]を選択して、SV#I#_needCompensationが追加されていることを確認します。ストではneedCompensation()関数が0を返し、3回目のテストでは1を返す動作になります。

     

  4. テストケースエディター右上の[新規追加]から、[スタブ設定]を選択し、右側のボタンを押下します。

     

     

  5. 追加されたスタブ設定の関数欄にカーソルを合わせ、CtrlキーとSpaceキーの同時押しで関数一覧を表示し、そこから"needCompensation"を選択します。


    ※スタブの作成をしているにも関わらず候補が表示されない場合、一度テストケースエディターを閉じて開きなおしてください。

  6. [アクション]の1行目を選択して、[SET VALUE]を選択します。

     

  7. [P1]列の1行目を選択し、<name>を削除して、CtrlキーとSpaceキーの同時押しで、[Variables]>[*__return]を選択します。

     

  8. [P2]列の1行目を選択し、<value>を削除して、Ctrl+Spaceキーを押下し、[Data Source API]>[CPPTEST_DS_GET_INTEGER(<column_name>)]を選択します。


  9. もう一度、[P2]列の1行目の[CPPTEST_DS_GET_INTEGER()の後にカーソルを合わせ、Ctrl+Spaceキーを押下し、[Data Source Columns] > [SV#I#_needCompensation]を選択します。

     

  10. テストケースを保存し、[テストケース エクスプローラー]からテストケースを選択し、右クリック > テスト履歴 > [03.単体テスト実行 (File Scope)]でテストを実行します。

     

  11. "needCompensation()"関数が"0"以外を返した場合のテストができていることを確認します。


テストデータを編集して単体テストを実行 – 条件に応じて、スタブの戻り値を変更する –

前回のテストにて、"needCompensation()"関数が"0"以外と返した場合のテストが実行できています。このときにコールされる"calcCompensation()"関数の引数"temp"に応じ、"calcCompensation()"関数の戻り値を変更するテストを行います。

  1. テストデータを追加します。


  2. テストケースエディター右上の[新規追加]から、[スタブ設定]を選択し、右側のボタンを押下します。
    追加されたスタブ設定の関数欄にカーソルを合わせ、CtrlキーとSpaceキーの同時押しで関数一覧を表示し、そこから"calcCompensation"の[スタブ設定]を追加します。

     

  3. [スタブ設定]の右側にある[Table]を[Code]に変更します。


  4. コードを追加し、"temp"によってスタブの返り値が変わるよう設定します。

    この設定により、"calcCompensation()"関数の引数"temp"が"0"より大きい場合は*__return に"100"を設定し、それ以外の場合は*__return に"0"を設定し、返す動作となります。(※ *__returnの”__”は アンダースコアが2つですのでご注意ください。)
    テストデータの5行目(4回目のテスト)では、"addSignals()"関数の引数"temp"が"0"のため、"calcCompensation()"関数の引数も"0"となります。
    そのため、"calcCompensation()"関数は"0"を返します。テストデータの6行目(5回目のテスト)では、"addSignals()"関数の引数"temp"が"10"のため、"calcCompensation()"関数の引数も"10"となります。そのため、"calcCompensation()"関数は"100"を返します。

  5. テストケースを保存し、[テストケース エクスプローラー]からテストケースを選択し、右クリック > テスト履歴 > [03.単体テスト実行 (File Scope)]でテストを実行します。

     

  6. 引数"temp"によって、"calcCompensation()"関数の戻り値が変わっていることが分かります。





Copyright © 2023 TechMatrix Corporation. All rights reserved