ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

Visual Studio 2012 のネイティブ(C++)単体テスト

Visual Studio 2012から、やっとネイティブC++単体テストがサポートされました(Visual Studio 2010では、C++/CLIでのテストコードでした)。

Visual Studio 2012 では Windows ストアアプリ用のC++/CXも追加された(もちろんテストプロジェクトもあります)ので、実際には次の3つの単体テストプロジェクトがあります。

ここでは、Visual Studio 2012 UltimateでのネイティブC++単体テストの手順を順番に紹介します。Visual Studio 2012 Express for Desktop でも一部機能をのぞいて、ほぼ同様の機能が実装されています。

1. テスト対象のプロジェクトを作成します。ここでは「Win32 コンソールアプリケーション」で「NativeLibrary」というプロジェクト名にしています。

2. アプリケーションの種類を「スタティック ライブラリ」にして「完了」します。

3. 続いて、同じソリューションに「ネイティブ単体テスト プロジェクト」を作成します。

4. ソリューションにテスト対象のライブラリ「NativeLibrary」と、テストプロジェクトの「NativeLibraryTest」の2つが作成されました。

5. この状態で、一度ビルドしてみましょう。テストエクスプローラーに「未実行のテスト」が追加されます。テストエクスプローラーが表示されていない場合は、メニューの「テスト|ウィンドウ|テストエクスプローラー」から表示してください。

6. 今度は「テストエクスプローラー」の左上にあるボタンを押して「リビルド」してみてください。ビルドの終了とともに、テストが実行されます(この機能はExpressにはありません)。

7. テストメソッド名を変えてみます。日本語も通りますので好きな名前にしてみてください。これでビルドすると、テストエクスプローラーのほうもメソッド名が変わります。

8. 実際にテスト対象にするクラスを作りましょう。NativeLibraryプロジェクトの「追加」からクラスを追加します。

9. Calcと名前を付けたクラスを作成します。

10. 足し算のメンバ関数を作成します。とりあえず実装はしません。

11. NativeLibraryTestのプロジェクトプロパティを開き、C++の「追加のインクルード ディレクトリ」に「$(SolutionDir」を追加します。

12. 続いて「共通プロパティ」の「新しい参照の追加」を押します。

13. テスト対象の「NativeLibrary」プロジェクトが表示されるので、チェックを入れて「OK」を押します。

14. 参照に「NativeLibrary」が追加されたことを確認します。

15. これでテストの準備ができたので「NativeLibraryTest」プロジェクトにテストコードを書きます。テスト対象を実装していないので、テストは失敗します。

16. テスト対象の実装をします。テストは成功します。

ここまででネイティブC++での単体テストの基本はおしまいです。C#のようにメソッドスタブやクラスの自動生成、リファクタリングといった機能はないので、若干手間がかかります。

次回は、このプロジェクトを使って、クラウド上の Team Foundation Service Previewでビルドとテストを行います。