*

単体テストの効率化を考える(4)-スタブの引数(ダブルポインタ)

公開日: : 最終更新日:2020/05/10 徒然, 開発

どもです。

「単体テストの効率化について考える」の4回目です。
1回目から3回目まではコチラ:
単体テストの効率化を考える(1)-はじめに
単体テストの効率化を考える(2)-スタブの戻り値
単体テストの効率化を考える(3)-スタブの引数

1.振り返り

前々回から、

  • スタブを自動生成して単体テストを効率化するために、スタブで行うべき処理について考える。

というテーマで、考えたことを書いています。
前回のエントリでは、関数の引数に着目し、ポインタか否か、ポインタの場合には「入力」か「出力」か毎にスタブでの処理、実装について考えました。
その結果、

  • ポインタではない場合には、渡された値をそのまま代入/保持するためのバッファを用意する。
  • ポインタの場合は、「入力」であれば渡されたアドレスを代入/保持するためのバッファを用意する。
  • ポインタでありかつ「出力」の場合には、ポインタの実体に設定する値を保持するバッファを用意する。
  • ポインタでありかつ「出力」の場合には、呼び出される度に、用意したバッファの値をポインタの実体に代入して値を返す。
  • ポインタでありかつ「出力」かつポインタが「配列」を指す場合には、用意するバッファは2次元配列がよい。
    (ただし、自動化の際には工夫が必要。)

という結論になりました。
そして今回は前回に引き続き、「関数の引数」について考えます。
特に、「ダブルポインタ」について考えます。

2.ダブルポインタとは?

「そもそも」です。
「ダブルポインタ」とは何か。
それは、「ポインタへのポインタ」です。
それでは、「ポインタへのポインタ」とは何か。
言葉にすると長くなってしまうので、簡単ですが絵にして説明します。
think_about_unit_test_004_01
この絵について解説すると、変数aがPCのメモリ上のどこか(絵の中では、0x000004D6というアドレスの場所)に確保されています。
そこには、値「0x68」がセットされています。
また、別の変数bがメモリ上のどこか(絵の中では0x00002720)に確保されています。
変数bの値には、「0x000004D6」がセットされています。
この値は、変数aの値が格納されている場所の「アドレス」になります。
コレがポインタであり、「メモリ上のアドレスを格納する変数」です。
そしてさらに別の変数cがメモリ上のどこか(絵の中では0x00002774)に確保されています。
この変数cは、値「0x00002720」がセットされています。
これは変数bのアドレスであり、即ち変数cが「ポインタへのポインタ」です。
簡単だが、この関係を確認するためのサンプルプログラムが下記です。

実行すると、次のような結果が得られます。

絵の中に書かれたアドレスは、上記プログラムの実行結果とは一致しませんが、意味しているものは同じです。

3.引数がダブルポインタの場合

では、関数の引数をダブルポインタにする場合は、どのような場合か?
(基本的には)何某かの値/領域のアドレスを関数から取得したい場合に、引数にダブルポインタが使用されます。
例えば、以下のようなコードになります。

上記コードをビルド、実行すると下記の結果が得られました。

4.引数がダブルポインタの場合のスタブ

前項まで、引数をダブルポインタにするのはどのような場合か、またどのような動作をするかがこれでわかりました。
それではやっと本題である、「スタブでのダブルポインタの引数への処理、実装」について考えます。

ここまで書いてきた内容から、ダブルポインタの変数が使用される場面は分かってきました。
そこから考えられる、ダブルポインタの変数に対してスタブが行うべき処理は、以下のことが考えられます。

  • ダブルポインタに格納された値の保持
  • ダブルポインタに別のポインタの値(アドレス)を設定する

具体的なスタブの実装、処理は下記のようになるかと思います。

この例では、ダブルポインタに設定されるアドレスのために、予め2次元配列を用意しています。
そして、スタブが実行される度に2次元配列の別の領域のアドレスがダブルポインタにセットされます。

関数の呼び出し元で返された領域の値を参照している場合には、事前にバッファ(上記の例では、「DoublePointer_arg_value」)に予め値をセットしておけば、対応ができます。

5.まとめ

今回のエントリでは、関数の引数にダブルポインタを持つ場合、その関数のスタブでのダブルポインタに対する処理を考えてみました。
結論ですが、

  • ダブルポインタに格納された値を保持する
  • ダブルポインタには、予め用意しておいたバッファへのアドレスを設定する。
  • ダブルポインタに設定する値は、スタブが複数回呼ばれた場合に備えて2次元配列にする。

です。

さて。
これまで4回にわたって

  • スタブを自動生成して単体テストを効率化するために、スタブで行うべき処理について考える。

について考えてきました。
この4回のエントリの中で、「スタブで行うべき処理」については分かってきました。
そこで、次回からは(やっと?とうとう?)スタブの自動生成に入ります。

ではっ!

続きはコチラ

単体テストの効率化を考える(5)-スタブの自動生成への入力
単体テストの効率化を考える(6)-スタブの自動生成ツール

関連記事

toppers

C言語でEV3開発(16)-TOPPERS/HRP2 EV3 で Bluetooth割込み

どもです。 今回は、EV3 の環境をTOPPERS/HRP2 EV3RT で作成したアプリをPC上

記事を読む

no image

C言語でEV3開発(13)-opOUTPUT_STEP_SPEEDコマンド

どもです。 今回のエントリーは、モーターを動かすコマンドである 「opOUTPUT_STEP_S

記事を読む

c_sharp_eye_catch

Windowsでのカバレッジ測定-OpenCoverageを使ってみた

どもです。 以前、OpenCppCoverageを使用してWindows上でカバレッジ測定する方法

記事を読む

MY_MFC_LOGO

MFCプログラミング(3):クリップボードへのデータ形式の登録

どもです。 今回も、クリップボードネタです。 1.背景(簡単に) アプリケーションにコピー

記事を読む

GitHub

C/C++のスタブを自動生成するツールを公開しました

どもです。 突然ですが、C/C++の単体テストで使用する「スタブ」を自動で生成するツールを公開

記事を読む

raspberry-pi

ライブラリでRasPiのピンにアクセス(2)-SPIのインターフェース追加

どもです。 前回のエントリでは、RaspberryPiのピンをより簡便に使用できるようにするた

記事を読む

Qt_logo_2016

QtでRaspberryPi/GUI開発(2):ためしに時計を作ってみた(其の弐)

どもです。 前回のエントリーでは、ラジオボタンのグループ化と、選択されたボタンの特定方法まで記載し

記事を読む

OpenCvLogo

RaspberryPiで物体検出(1)-白線検出への挑戦(1):輪郭検出による白線検出

どもです。 今回は、OpenCvを用いて道路の白線検出について、です。 1.今回の環境 O

記事を読む

python

VisualStudioCommunityでのPython開発環境構築

どもです。 最近、VisualStudioでのPython開発を始めました。 その際の環境構築に

記事を読む

raspberry-pi

ライブラリでRasPiのピンにアクセス(3)-SPIのインターフェース追加(その2)

どもです。 今回のエントリも、前回に引き続き、RaspberryPiのピンをより簡便に使用でき

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

think_about_utest
VisualStudioで実行した単体テストの結果の出力(3)-テスト実行からレポート生成までをツールで自動化

どもです。 前々回、前回と、VisualStudio/C#での単

think_about_utest
VisualStudioで実行した単体テストの結果の出力(2)-出力ファイルの読める化

どもです。 前回の続きです。 前回は、VisualStud

think_about_utest
VisualStudioで実行した単体テストの結果の出力(1)-ファイルへの出力

どもです。 最近、VisualStudio/C#でよく開発してい

think_about_utest
単体テストの効率化を考える(6)-スタブの自動生成ツール

どもです。 「単体テストの効率化について考える」の6回目です。

think_about_utest
単体テストの効率化を考える(5)-スタブの自動生成への入力

どもです。 「単体テストの効率化について考える」の5回目です。

→もっと見る

PAGE TOP ↑