ユニットテストでは何をテストするか

Posted: 2012年11月11日

テストをしたい項目は山のように存在する
ユニットテストではどのようなテストが可能であり
また、どのように構築していくべきか

前提

  • テスト対象のプログラム設計または実装が完了している
  • ユニットテスト用に設計が行われている

ブラックボックステスト

対象のクラスや、関数に対してブラックボックステストを行う
具体的には、
C++では、ヘッダーファイルを見てテストを行う
C#などのヘッダーが存在しない言語は、アウトラインを見て行う

  • 見て行うって?

例えば、ヘッダファイルにSendMessage関数が存在した場合

 LRESULT SendMessage(
   HWND hWnd,      // 送信先ウィンドウのハンドル
   UINT Msg,       // メッセージ
   WPARAM wParam,  // メッセージの最初のパラメータ
   LPARAM lParam   // メッセージの 2 番目のパラメータ
 );

以下のテストを考える

  • 引数が異常な場合に例外が発生しないか
  • 正常系テストや異常系テストで戻り値が一致するか

ホワイトボックステスト

テスト対象の実際の処理が正しいか確認を行う
条件網羅テストや期待通り動作したかをテストする

実際に実装すると、テスト用設計にしたとしても
結果を返すことができない場合もあります。
その場合は、Mockオブジェクトなどを用いて
期待通り動作したか確認をします。

条件網羅

  • ループ回数のチェック等
 TCHAR *pBuf = _T("ABCDE")
 for (int nIndex = 0; nIndex <= 5; nIndex++) {
     inFile.Write(pBuf, sizof(pBuf) / sizeof(TCHAR));
 }

結果を返すことができない場合

  • スレッドを発行するだけのメソッド等

モンキーテスト

実際のモンキーテストとは多少異なりますが
そこら辺は納得してください

このテストでは、
引数に乱数値を入れることで見落としていたテストをカバーする役割

正常系と異常系で作成する。
結構な確率で、テストに問題がありNGになったりする・・・

カテゴリー: バグ, ユニットテスト | タグ: , , | コメント無し »

コメント