TDD Boot Camp(TDDBC) - TDDBC横浜2nd/環境構築(C++) Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

! Visual C++ で PCUnit な環境

!! 必要なもの
:Visual C++ Express:IDE です
:PCUnit: cunit like な libc 非依存のテスティングフレームワークです
:Ruby:コード生成スクリプトを使うために必要です

!! はじめに
この文書は [[Visual C++ Express|http://www.microsoft.com/ja-jp/dev/express/default.aspx]] で [[PCUnit|https://github.com/katono/PCUnit]] を使うための環境構築の手順です。
PCUnit 付属のコード生成スクリプトを使えるようにすることが目的です。
空っぽの状態から始める手がかりにしてください。

!! 1. プロジェクトを作りましょう
最低でも3つにしたほうがいいと思います。

* PCUnit
** スタティックライブラリ
** github で公開されている PCUnit のリソースを置いてしまいましょう
** ソースフォルダには .c なファイルを、ヘッダーフォルダには .h なファイルを入れてください
* SampleMain
** スタティックライブラリ
** 本体コードをここに入れます
* SampleTest (スタートアッププロジェクト)
** コンソールアプリケーション
** テストコードをここに入れます

ソリューションディレクトリからの構成は次のようになります。
C:\USERS\YUJIORAMA\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\SAMPLE
├───PCUnit
│   └───PCUnit
├───SampleMain
└───SampleTest

!! 2. プロジェクトを設定しましょう
テストを実行することが主目的なので、SampleTest についていろいろと設定をしていきます。

!!! 2.1 構成プロパティ > C/C++ > 全般
テストプロジェクトから PCUnit とメインプロジェクトのヘッダーファイルを参照できるようにすることが目的です。

今回はソースコードファイルとヘッダーファイルでディレクトリを分けない想定のため、プロジェクトのルートディレクトリを追加します。

設定は「追加のインクルードディレクトリ」に追加します。
初期値は空欄です。
$(SolutionDir)/PCUnit
$(SolutionDir)/SampleMain

!!! 2.2 構成プロパティ > リンカー > 入力
テスト実行ファイルに、PCUnit とメインプロジェクトの生成物をリンクできるようにすることが目的です。

今回は出力先をデフォルトのままにする想定で、それぞれのライブラリファイルを追加します。
設定は「追加の依存ファイル」にセミコロン区切りで追加します。
初期値にいろいろ入っているので、消してしまったらプロジェクト作りなおしたほうが早いと思います。
$(SolutionDir)/$(ConfigurationName)/PCUnit.lib
$(SolutionDir)/$(ConfigurationName)/SampleMain.lib

!!! 2.3 構成プロパティ > ビルドイベント > ビルド前イベント
テストプロジェクトをビルドする前に、コード生成スクリプトを実行してテストスイートを登録できるようにすることが目的です。

ディレクトリの指定は完全パスで行います。
半角スペースが引数の区切りになってしまうため、クォートが必要です.
(Rubyのインストール先はそれぞれの環境に合わせてください)
d:\dev\ruby193\bin\ruby '$(SolutionDir)/PCUnit/PCUnit/pcunit_register.rb' -d '$(ProjectDir)'

!!! 2.4 プロジェクトの依存関係
ソリューションエクスプローラーで、テストプロジェクトの依存先に PCUnit とメインプロジェクトを追加してください。

!! 3. テストコードの生成
コマンドプロンプトを起動して、ソリューションディレクトリに移動します。
cd c:\Users\yujoirama\Documents\Visual Studio 2010\Projects\Sample

PCUnit のひな形生成スクリプトを実行します。
(Rubyのインストール先はそれぞれの環境に合わせてください)
d:\dev\ruby193\bin\ruby PCUnit\PCUnit\pcunit_template.rb SampleSuite -d SampleTest -p -m

SampleTest の下に次のファイルが生成されるので、IDE からテストプロジェクトのソースフォルダに追加してください。
main.cpp
SampleSuite.cpp

!! 4. ビルド
IDE で "F7" を押すか、デバッグメニューの「ソリューションのビルド」を実行してください。
出力ウインドウに次のような結果が表示されます。
1>------ ビルド開始: プロジェクト: SampleMain, 構成: Debug Win32 ------
2>------ ビルド開始: プロジェクト: SampleTest, 構成: Debug Win32 ------
2>  SampleSuite.cpp
2>  main.cpp
2>  コードを生成中...
2>  SampleTest.vcxproj -> c:\users\yujoirama\documents\visual studio 2010\Projects\Sample\Debug\SampleTest.exe
========== ビルド: 2 正常終了、0 失敗、1 更新不要、0 スキップ ==========

!! 5. テストプログラムの実行
'''IDE で "Control + F5" を押してください。'''
(デバッグメニューから「デバッグ実行」を実行するとすぐにウインドウが閉じてしまいます)

コマンドプロンプトが開いて、次のように表示された状態になります。
何かキーを押すとウインドウは閉じます。

Suite: SampleSuite

Test: test_TODO
  c:\users\yujoirama\documents\visual studio 2010\projects\sample\sampletest\samp
lesuite.cpp(26) : PCU_FAIL
   TODO

1 Tests, 1 Failures, 0 Skipped

Press any key to continue . . .

以降は、テストプロジェクトに追加したソースコードファイルを編集していけば、
ビルド時にテストスイートの登録が行われるようになります。

!! 6. 開発のサイクル
以降は次のようなサイクルでコードを書いていく事になるでしょう。

!!! 6.1 すでにあるテストスイートを使う場合
+ テスト関数を書く
+ ビルド、実行する

!!! 6.2 テストスイートを追加する場合
+ コマンドプロンプトから pcunit_template.rb を実行する
+ 生成されたテストコードファイルをテストプロジェクトに追加する
+ テスト関数を書く
+ ビルド、実行する

! Visual C++ で googletest な環境

!! 必要なもの
:Visual C++ Express:IDE です
:googletest: C++ のための xUnit フレームワークです

!! はじめに
この文書は [[Visual C++ Express|http://www.microsoft.com/ja-jp/dev/express/default.aspx]] で [[googletest|http://code.google.com/p/googletest/]] を使うための環境構築の手順です。
空っぽの状態から始める手がかりにしてください。

!! 1. プロジェクトを作りましょう

最低でも3つにしたほうがいいと思います。

* gtest-md
** googletest の本体です
** 配布されてるアーカイブの中にあるやつを使います
*** 手順は後述します
* SampleMain
** スタティックライブラリ
** 本体コードをここに入れます
* SampleTest (スタートアッププロジェクト)
** コンソールアプリケーション
** テストコードをここに入れます

ソリューションディレクトリからの構成は次のようになります。
C:\USERS\YUJIORAMA\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\SAMPLE
├───SampleMain
└───SampleTest

!!! 1.1. googletest の導入
* [[ダウンロードページ|http://code.google.com/p/googletest/downloads/list]]から最新版(この時は1.6.0)を取得します
* 適当なディレクトリに展開します
* '''重要(?)''':展開したフォルダのプロパティから、「読み取り専用」のチェックを外します

ここからは Visual C++ を操作します。
* Visual C++ でさっき作ったソリューションを開きます
* ソリューションエクスプローラーでソリューションを右クリックし、「追加」から「既存のプロジェクト」を選択します
* ファイルダイアログから '''gtest-md.vcproj''' を選択します
** 場所は ''展開した googletest のフォルダ\msvc'' です
* 変換ウィザードに従いプロジェクト形式を変換してインポートします

!!! 1.2. プロジェクトの設定と確認
次のようにそれぞれのプロジェクトを設定します。

* gtest-md
** 「全般」「文字セット」→ '''Unicode 文字セットを使用する'''に変更
* SampleMain
** 特になし
* SampleTest
** スタートアッププロジェクトに設定
** 「C/C++」「全般」「追加のインクルードディレクトリ」→''展開した googletest のフォルダ\include''を追加
** 「リンカー」「入力」「追加の依存ファイル」→''展開した googletest のフォルダ\msvc\$(SolutionName)\$(ConfigurationName)\gtestd.lib''を追加

''SampleTest'' プロジェクトに SampleTest.cpp があるなら、次の内容で置き換えます。
(なければ main.cpp とでもして追加します)

#include "stdafx.h"
#include "gtest/gtest.h"

int _tmain(int argc, _TCHAR* argv[])
{
   testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
}

'''IDE で "Control + F5" を押してください。'''
(デバッグメニューから「デバッグ実行」を実行するとすぐにウインドウが閉じてしまいます)

コマンドプロンプトが開いて、次のように表示された状態になります。
何かキーを押すとウインドウは閉じます。

[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (0 ms total)
[  PASSED  ] 0 tests.
続行するには何かキーを押してください . . .

!! 2. googltest の使い方

[[日本語訳ドキュメント|http://opencv.jp/googletestdocs/primer.html]]があるので参照してください。