単体テスト(テストケースエディター スタブの制御)
本章では、テストケースエディターとスタブ機能を使用し、インポートした"Sensor"プロジェクトのソースファイルである"sensor.c"に実装されている"int addSignals()"関数が仕様に則って動作するかをテストする手順を記載します。
テスト対象関数である"int addSignals()"関数は下記のような仕様となります。
外部関数である"needCompensation()"の戻り値が"0"以外の場合、引数の"signalA"、"signalB"、および"calcCompensation()"関数の戻り値を加算した値を返します。
外部関数である"needCompensation()"の戻り値が"0"の場合、引数の"signalA"、"signalB"を加算した値を返します。
今回の単体テストには、テスト対象関数でコールしている関数に未実装の外部関数が含まれるため、単体テストの手順にスタブを作成する手順を加えて実施します。
このページの内容:
単体テスト対象のソースに対してテストスイートを作成
テスト対象のソースファイル"sensor.c"を選択し、 青色の三角のボタンの右側にある▼ボタンを選択します。
展開されたメニューから[テストの実行] > [ユーザー定義] > [Unit Testing] > [01.テストスイート作成]を実行します。
テストコンフィギュレーションが正常に完了することを確認します。
単体テスト対象のソースに対してシンボル情報を収集
[Parasoft]メニュー> [ビューを表示] > [スタブ]を選択します。
[スタブ]ビューが表示されます。
テスト対象ソースファイルを選択し、 青色の三角のボタンの右側にある▼ボタンを選択します。
[テストの実行] > [ユーザー定義] > [Unit Testing] > [File Scope] > [02.シンボル情報収集(File Scope)]メニューを選択します。
シンボルデータが[スタブ]ビューに表示されます。 表示されたシンボルに対し、コンテキストメニューからスタブを作成できます。
スタブの作成
[スタブ]ビューから、[定義]が[なし]となっているシンボルを選択後、右クリックし[自動スタブの作成] を選択します。
スタブが作成されます。デフォルトでは空関数(戻り値がある場合、0を返す)となります。
テストケースの作成
[テストケース エクスプローラー]から、テストケースを追加するテストスイートを選択し右クリックします。
[新規追加] > [エディターを使用したテストケース…]メニューを選択します。
[テスト ケース名]に、"test_addSignals_editor"を入力した後、[OK]を選択します。
表示されるエディター画面上の[次のテスト ケースを作成]ドロップダウンメニューを選択します。
ドロップダウンメニューから" int addSignals (int, int, int)"を選択し、右側のボタンを押下します。
データソースの選択で、[外部データ ソース]を選択します。
データソースの設定内容を示すウィンドウで[OK]を選択します。
ご利用のPCでcsvを開くアプリケーションが起動します(今回はExcelを例にしております)。
テストデータを編集
テストデータを追加します。
変更を保存します。
エディターの中で、Ctrl + Sキーを押下しテストケースを保存します。
単体テストを実行
[テストケース エクスプローラー]からテストケースを選択し、 青色の三角のボタンの右側にある▼ボタンを選択します。
[テストの実行] > [ユーザー定義] > [Unit Testing] > [File Scope] > [03.単体テスト実行 (File Scope)]メニューを選択します。
単体テストの結果を確認
[テストケース エクスプローラー]から結果を確認できます。
ソースファイル上に、カバレッジ結果が実行箇所:緑色 / 未実行箇所:赤色でハイライトされます。
テストデータを編集して単体テストを実行 – スタブの戻り値を変更する –
前回の単体テストのカバレッジ結果より、実施したテストでは、"needCompensation()"関数が"0"以外を返した場合のテストができていないことがわかります。本章では、作成したスタブの振る舞いを設定して、"needCompensation()"関数の戻り値を変更するテストを行います。
テストデータに、SV#I#_needCompensation列を追加します。
テストデータを追加し保存します。
テストケースエディターに戻り、[パラメーター]欄の右側にある[列名の更新]を選択して、SV#I#_needCompensationが追加されていることを確認します。ストではneedCompensation()関数が0を返し、3回目のテストでは1を返す動作になります。
テストケースエディター右上の[新規追加]から、[スタブ設定]を選択し、右側のボタンを押下します。
追加されたスタブ設定の関数欄にカーソルを合わせ、CtrlキーとSpaceキーの同時押しで関数一覧を表示し、そこから"needCompensation"を選択します。
※スタブの作成をしているにも関わらず候補が表示されない場合、一度テストケースエディターを閉じて開きなおしてください。[アクション]の1行目を選択して、[SET VALUE]を選択します。
[P1]列の1行目を選択し、<name>を削除して、CtrlキーとSpaceキーの同時押しで、[Variables]>[*__return]を選択します。
[P2]列の1行目を選択し、<value>を削除して、Ctrl+Spaceキーを押下し、[Data Source API]>[CPPTEST_DS_GET_INTEGER(<column_name>)]を選択します。
もう一度、[P2]列の1行目の[CPPTEST_DS_GET_INTEGER()の後にカーソルを合わせ、Ctrl+Spaceキーを押下し、[Data Source Columns] > [SV#I#_needCompensation]を選択します。
テストケースを保存し、[テストケース エクスプローラー]からテストケースを選択し、右クリック > テスト履歴 > [03.単体テスト実行 (File Scope)]でテストを実行します。
"needCompensation()"関数が"0"以外を返した場合のテストができていることを確認します。
テストデータを編集して単体テストを実行 – 条件に応じて、スタブの戻り値を変更する –
前回のテストにて、"needCompensation()"関数が"0"以外と返した場合のテストが実行できています。このときにコールされる"calcCompensation()"関数の引数"temp"に応じ、"calcCompensation()"関数の戻り値を変更するテストを行います。
テストデータを追加します。
テストケースエディター右上の[新規追加]から、[スタブ設定]を選択し、右側のボタンを押下します。
追加されたスタブ設定の関数欄にカーソルを合わせ、CtrlキーとSpaceキーの同時押しで関数一覧を表示し、そこから"calcCompensation"の[スタブ設定]を追加します。[スタブ設定]の右側にある[Table]を[Code]に変更します。
コードを追加し、"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"を返します。テストケースを保存し、[テストケース エクスプローラー]からテストケースを選択し、右クリック > テスト履歴 > [03.単体テスト実行 (File Scope)]でテストを実行します。
引数"temp"によって、"calcCompensation()"関数の戻り値が変わっていることが分かります。
Copyright © 2023 TechMatrix Corporation. All rights reserved