Visual C++ Express で PCUnit

はじめに

この文書は Visual C++ ExpressPCUnit を使うための環境構築の手順です。
PCUnit 付属のコード生成スクリプトを使えるようにすることが目的です。
空っぽの状態から始める手がかりにしてください。

必要なもの

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

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 すでにあるテストスイートを使う場合
  1. テスト関数を書く
  2. ビルド、実行する
6.2 テストスイートを追加する場合
  1. コマンドプロンプトから pcunit_template.rb を実行する
  2. 生成されたテストコードファイルをテストプロジェクトに追加する
  3. テスト関数を書く
  4. ビルド、実行する