私はCPPUNIT 1.12.1で作業しています。なぜこのマクロは1つのパラメータを持つテンプレートを受け入れ、2つのパラメータを持つテンプレートを拒否しますか?
それは定義されたマクロを持っています
#define CPPUNIT_TEST_SUITE_ADD_TEST(test) \
context.addTest(test)
#define CPPUNIT_TEST(testMethod) \
CPPUNIT_TEST_SUITE_ADD_TEST( \
(new CPPUNIT_NS::TestCaller<TestFixtureType>( \
context.getTestNameFor(#testMethod), \
&TestFixtureType::testMethod, \
context.makeFixture())))
私はテンプレートを使用してすることが可能となり、すべてのテストがvoid
関数でなければならない、CppUnitの作品としてテンプレートを使用して、同じテストスイート(に多くのテストを追加したいですさまざまな "パラメータ"を持つ同じvoid
関数を呼び出す...)。
これは完璧に動作します:
class MyTestSuite1 : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(MyTestSuite1);
CPPUNIT_TEST(doTest<false>);
CPPUNIT_TEST(doTest<true>);
CPPUNIT_TEST_SUITE_END();
template<bool param> void doTest() { /* test here */ }
};
CPPUNIT_TEST_SUITE_REGISTRATION(MyTestSuite1);
、これはそうではない:
class MyTestSuite2 : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(MyTestSuite2);
CPPUNIT_TEST(doTest<false,false>);
CPPUNIT_TEST(doTest<true,false>);
CPPUNIT_TEST_SUITE_END();
template<bool param1,bool param2> void doTest() { /* test here */ }
};
CPPUNIT_TEST_SUITE_REGISTRATION(MyTestSuite2);
コンパイラ(Visual Studioの2015)が報告されます。
1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(20): warning C4002: too many actual parameters for macro 'CPPUNIT_TEST' 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(21): warning C4002: too many actual parameters for macro 'CPPUNIT_TEST' 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(20): error C2059: syntax error: ')' 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(21): error C2059: syntax error: ')' 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(22): error C2143: syntax error: missing ';' before '}' 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(22): error C2065: 'namer': undeclared identifier 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(22): error C2065: 'factory': undeclared identifier 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(22): error C2059: syntax error: ')' 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(29): error C2143: syntax error: missing ';' before '{' 1>b:\dev\vobs_diabeloop\private\tst\regulation\cppunit\hyper_ftac3\test.cpp(30): error C2143: syntax error: missing ';' before '{'
なぜですか?どのようにマクロは正しく1つのテンプレートパラメータを扱うことができますが、2つは失敗しますか?どのように私は簡単にそれをコンパイルして動作させることができますか?
編集: はすでに成功せずCPPUNIT_TEST((doTest<false,false>));
(error C2143: syntax error: missing ';' before ')'
を取得)
'の#define COMMA、'そして 'を渡したいことを見ているのでCPPUNIT_TEST(doTest); ' –
@PiotrSkotnicki:信じられないほど...それは動作します。しかし、なぜ私は本当に興味があるのか分かりません....あなたはこれを答えとして投稿することができますか? – jpo38
'CPPUNIT_TEST(doTest));' - > '&TestFixtureType::(doTest )'は無効です。プリプロセッサは 'CPPUNIT_TEST(doTest );と思う1つのパラメータ –
Danh