Index: [Article Count Order] [Thread]

Date:  Sat, 09 Mar 2002 22:20:53 +0900
From:  NAKAGUCHI Takao <takao-n@....jp>
Subject:  [XP-jp:03293] DUnit を C++Builder5 	で使う。
To:  extremeprogramming-jp@....jp
Message-Id:  <3C8A0C35.3307E347@....jp>
X-Mail-Count: 03293

中口です。


C++Builder5 で DUnit(http://dunit.sourceforge.net/) を使う方法を紹介します。

元の CppUnitCB がテストメソッドの自動認識機能を備えていなかったので、
それを付け加えたものを公開していましたが、Delphi 用の DUnit ではその
機能が使えて、かつ見た目もかっちょいい(個人的な意見)ので、DUnit を
使うことにしました。いろいろ調べ中ですが、とりあえず簡単なサンプルを
作ることができました。

DUnit の利用方法は、

・テストを DLL 化して dunit.exe でロードして実行、
・DUnit のソースを直接テストプログラムに組み込む、
・DUnit をパッケージ化して、テストプログラムから利用する。

などが考えられます。私は最後の方法を選びました。


I. パッケージの作成
  1. dunit(試したバージョンは 5.0.2)を展開し、src ディレクトリに
     パッケージを作成(DUnitC5.bpk)。
  2. 作成したパッケージに、TestFramework.pas, GUITestRunner.pas を追加。
     (最小限の構成。TextTestRunner, TestExtensions も必要に応じて)
  3. ビルド。

II. テストの記述
  1. アプリケーション(Project1.bpr)を新規作成し、Unit1 を削除し、新たに
     ユニットを新規作成(フォームを含まないもの)。
  2. Project1.cpp を以下のようにする。

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEUNIT("Unit1.cpp");
//---------------------------------------------------------------------------

#include <GUITestRunner.hpp>
//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try{
                Application->Initialize();
                Guitestrunner::RunRegisteredTests();
        } catch (Exception &exception){
                Application->ShowException(&exception);
        }
        return 0;
}
//---------------------------------------------------------------------------

  3. Unit1.h にテストクラスを定義する。

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------

#include <TestFramework.hpp>
//---------------------------------------------------------------------------

class TestCaseSample : public TTestCase{
__published:
        void __fastcall TestMethod();
};
//---------------------------------------------------------------------------
#endif

     __published 部に、void __fastcall Test*(); という名前でメソッドを作成
     すると、テストメソッドとして自動で認識される。


  4. Unit1.cpp にテストの中身とその登録コードを記述

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
//---------------------------------------------------------------------------

void __fastcall TestCaseSample::TestMethod()
{
        CheckEquals(0, 3, "");
}
//---------------------------------------------------------------------------

class Initializer{
public:
        Initializer(){
                RegisterTest(TTestCase::Suite(__classid(Test)));
        }
};
static Initializer init_;
//---------------------------------------------------------------------------

  5. プロジェクトオプションの設定
    プロジェクトオプションで、パッケージを使って構築する設定にし、DUnitC5
    を追加。インクルードパスに、dunit の src ディレクトリを追加する。

  6. ビルド
    成功すればテスト画面が表示され、実行ボタンでテストを実行することが
    できます。


NAKAGUCHI Takao
takao-n@....jp