| 連載 C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)επιστημη(えぴすてーめー)2007/09/14 |
![]() |
|
|
|
●C++ネイティブ・コードのテストの制限
NUnitは.NETに対応した単体テスト・フレームワークですから、ネイティブ・コードの検証にはいくつかの制限があります。
int型やlong型などの比較検証は、そのまま「Expect(結果値, EqualTo(期待値))」というコードで検証できますが、例えば文字列では、
String^ expected = gcnew String(期待値);
String^ actual = gcnew String(結果値);
Expect(actual, EqualTo(expected));
のようにSystem::String型に変換するか、もしくは、
Expect(strcmp(結果値,期待値), EqualTo(0));
のような検証コードを書くことになるでしょう。
そのような例を簡単に示しましょう。以下にCounterクラスよりもやや規模の大きなクラスを用意しました。文字列のトークン分割を行う「tokenizer」クラスです(プロジェクトはVisual C++のスタティック・ライブラリ・プロジェクトで「tokenizer」とし、ファイルは「tokenizer.h」などを作成しました)。
|
|
| tokenizerクラスのヘッダ・ファイル(tokenizer.h) |
tokenizerクラスの実装内容は省略します。詳しく知りたい場合は、次のリンクから本稿の全ソース・コードを含むファイルをダウンロードして参照してください(※なお、これをビルドするためには「nunit.framework」アセンブリへの参照設定を削除して追加し直す必要があります)。
このtokenizerクラスのtoken関数は標準C++ライブラリのstd::string型の文字列を返します。token関数が期待した文字列を返すことを検証するコードは以下のようになります(以下のコードは、Visual C++のCLRクラス・ライブラリ・プロジェクト「tokenizerTest」を追加したうえで、tokenizerTest.cppファイルに実装します)。
|
|
| tokenizerクラスをテストするソース・ファイル(tokenizerTest.cpp) |
NUnitを使ったC/C++コードのテストではテスト・コードをC++/CLIで記述するわけですが、C++/CLIはクラス名やメソッド名に漢字や仮名を使うことができ、適切なメソッド名を与えることで、“何についてのテストか?”がそのままNUnitテストランナーに表示されます。以下の画面はその例です。
![]() |
| tokenizerTest.dllのすべてのテストが成功した例 |
| クラス名やメソッド名に日本語が使えるため、“何についてのテストか?”が分かりやすい。 |
■おまけ:ReSharper UnitRun
最後にJetBrainsのReSharper UnitRunを紹介しておきましょう。
UnitRunはNUnitによるテストをVS 2005のIDE(=統合開発環境)の中で実行できるアドイン・ツールです。UnitRunをインストールすると、次の画面のようにC#/VBのテスト・コードに小さなマークが打たれ、そこをクリックすることでテストが行えます。
![]() |
| テストを実行するために現れるUnitRunのメニュー |
| C#/VBのテスト・コードに小さなマークが打たれ、そこをクリックすることでテストが行える。 |
ここで実際にテストを実行すると、そのテスト結果はVS 2005 IDE内にウィンドウとして表示されます。このウィンドウは、IDEが持つほかのウィンドウと同様、IDE内にドッキングできます。
![]() |
| テスト結果が表示されるUnitRunのウィンドウ |
また、[ソリューション エクスプローラ]の項目を右クリックすると、コンテキスト・メニューに[Run Unit Tests]や[Debug Unit Tests]が現れます。これを選択することで、ソリューションに含まれるすべてのテストをまとめて実行することができます。
■
以上で「連載:C++開発者のための単体テスト入門」は完結です。![]()
| INDEX | ||
| [連載]C++開発者のための単体テスト入門 | ||
| 第3回 C++アプリケーションの効率的なテスト手法(NUnit編) | ||
| 1.NUnitのインストール | ||
| 2.NUnitの試運転 | ||
| 3.C++ネイティブ・コードをテストする | ||
| 4.NUnitテストの制限+おまけ:ReSharper UnitRun | ||
| 「C++開発者のための単体テスト入門」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -





