C++ 使用CPPUNIT\u TEST\u SUITE宏时出错

C++ 使用CPPUNIT\u TEST\u SUITE宏时出错,c++,cppunit,C++,Cppunit,在阅读了CppUnit的食谱和大量的谷歌搜索之后,我还没能找出我遇到的特定错误的原因 我有一个非常基本的CppUnit testFixture类-> 我有一个文件-MyTest.h,其中只有一个TestFixture类定义 // MyTest.h #include <cppunit/ui/text/TestRunner.h> #include <cppunit/extensions/TestFactoryRegistry.h> #include <cppunit/e

在阅读了CppUnit的食谱和大量的谷歌搜索之后,我还没能找出我遇到的特定错误的原因

我有一个非常基本的CppUnit testFixture类-> 我有一个文件-MyTest.h,其中只有一个TestFixture类定义

// MyTest.h
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/extensions/HelperMacros.h>

class MyTest : public CppUnit::TestFixture
{
     CPPUNIT_TEST_SUITE(MyTest);    // Line num 8
     CPPUNIT_TEST(TestFailure);
     CPPUNIT_TEST_SUITE_END();

  public:
    void TestFailure()
    {
        CPPUNIT_ASSERT(false);
    }
 };
然后,一个名为main.cpp的文件将实例化runner并运行实际的testcase

 // main.cpp 

 #include <cppunit/ui/text/TestRunner.h>
 #include <cppunit/extensions/TestFactoryRegistry.h>
 #include <cppunit/extensions/HelperMacros.h>

 // In my main, I define a macro ADD_TEST and do #include of file called "testList.h"
 // So my testList.h can have any number of ADD_TEST macros.
 int main(int argc, char **argv)
 {
      CppUnit::TextUi::TestRunner runner;

      #define ADD_TEST(_testName) \
              runner.addTest(_testName::suite());
      #include testList.h"   
      #undef ADD_TEST

      runner.run();
      return true;
  }
现在,这个文件结构可以正常工作了,就像在Windows安装程序中一样。 在linux中,我会遇到以下奇怪的错误-

MyTest.h: In function 'int main(int, char**)': MyTest.h:8: error: 'main(int, char**)::MyTest' uses local type 'main(int, char**)::MyTest' 
MyTest.h:8: error: trying to instantiate 'template<class Fixture> class CppUnit::TestSuiteBuilderContext'
MyTest.h: In static member function 'static void main(int, char**)::MyTest::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&)':
MyTest.h:8: error: cannot convert 'CppUnit::TestSuiteBuilderContextBase' to 'int' in initialization
MyTest.h:在函数“int main(int,char**)”中:MyTest.h:8:错误:“main(int,char**)::MyTest”使用本地类型“main(int,char**)::MyTest”
MyTest.h:8:错误:尝试实例化“模板类CppUnit::TestSuiteBuilderContext”
MyTest.h:在静态成员函数“static void main(int,char**)::MyTest::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&)”中:
MyTest.h:8:错误:无法在初始化时将“CppUnit::TestSuiteBuilderContextBase”转换为“int”
这让我完全糊涂了。我知道宏正在被拾取,因为如果我注释掉MyTest.h中的num8行,则会出现“suite”未声明的错误。 但是CPPUNIT\u TEST\u SUITE等宏可用,那么为什么会出现错误呢? 我使用-lstc++、-ldl&-lcppunit标志编译

感谢您的帮助


谢谢 相反,考虑一个如下所示的main:

int main(int argc, char **argv)
{
    CppUnit::TextUi::TestRunner runner;
    CppUnit::Test *test = CppUnit::TestFactoryRegistry::getRegistry().makeTest();

    runner.addTest( test );
    runner.run();
    return true;
}
如果您想对运行哪个测试有不同的选择,可以通过将特定的测试名称作为参数传递给getRegistry来选择它们,如
getRegistry(“MyTest”).makeTest()中所示
MyTest.h: In function 'int main(int, char**)': MyTest.h:8: error: 'main(int, char**)::MyTest' uses local type 'main(int, char**)::MyTest' 
MyTest.h:8: error: trying to instantiate 'template<class Fixture> class CppUnit::TestSuiteBuilderContext'
MyTest.h: In static member function 'static void main(int, char**)::MyTest::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&)':
MyTest.h:8: error: cannot convert 'CppUnit::TestSuiteBuilderContextBase' to 'int' in initialization
int main(int argc, char **argv)
{
    CppUnit::TextUi::TestRunner runner;
    CppUnit::Test *test = CppUnit::TestFactoryRegistry::getRegistry().makeTest();

    runner.addTest( test );
    runner.run();
    return true;
}