Index: [Article Count Order] [Thread]

Date:  Tue, 20 Feb 2001 09:32:39 +0900
From:  OKA Toshiyuki <oka@....com>
Subject:  [XP-jp:01630] Re: CppUnit 改良 (?)	版
To:  extremeprogramming-jp@....jp
Message-Id:  <20010220093239F.oka@....com>
In-Reply-To:  <3A919A07.4D704AB9@....jp>
References:  <NEBBKMAMPMOONBNHEGBFGELMCBAA.yoshi@....jp>	<20010219.152746.68560480.u90156@....jp>	<3A919A07.4D704AB9@....jp>
X-Mail-Count: 01630

岡と申します。はじめまして。

渋川よしき <shibu@....jp> さん:
shibu> 僕はRubyのスクリプトで上に書いてあるようなことをやっています。
shibu> なぜ故にわざわざスクリプトかというと、TestCaseをパージングして、
shibu> suite()とmain()を自動生成させているからです。

私も最近 CppUnit を使い始めたのですが、何が面倒かって、あの、
クラス内でのメソッド宣言、スイートへの登録、そしてメソッド本体の
定義と、3回も同じようなことを書かなくちゃならないのが苦痛ですよね。

ということで、私の場合は、メソッド本体の定義から、メソッド宣言と
スイートへの登録をするヘッダーファイルを自動生成するようにして
います。

次のような感じ。

---- foo_test.cpp ----
class FooTestCase : public TestCase {
public:
	…
protected: 
#define __TEST_CASE_DECLARATION__ 
#include "foo_test.cases.h" 
#undef  __TEST_CASE_DECLARATION__ 
}; 

Test *FooTestCase::suite() 
{ 
    TestSuite *testSuite = new TestSuite( "FooTestCase" ); 

#define __TEST_CASE_ADDITION__ 
#include "foo_test.cases.h" 
#undef  __TEST_CASE_ADDITION__ 

    return testSuite; 
} 
 
void FooTestCase::testBar()
{
    assert( … );
}

----

から、"void XXXX::testYYYY(" というパターンを取り出して、

---- foo_test.cases.h ----

#ifdef __TEST_CASE_DECLARATION__
void testBar();
#endif

#ifdef __TEST_CASE_ADDITION__
testSuite->addTest( new TestCaller<FooTestCase>("testBar", &FooTestCase::testBar) );
#endif

----

を生成。

foo_test.cpp と foo_test.cases.h の依存関係のチェックなどは、
Makefile でやっています。
--
岡 俊行 (OKA, Toshiyuki) oka@....com