在阅读了 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);
}
};
此外,还有一个用于驱动这个 MyTest 类的 MyTest.cpp。
// MyTest.cpp
#include "MyTest.h"
然后,一个名为 main.cpp 的文件将实例化 runner 并运行实际的测试用例。
// 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;
}
这是我的 testList.h ->
#pragma once
#include MyTest.h
ADD_TEST(MyTest)
现在,这个文件结构可以工作了——就像在 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 中注释掉 Line num8,则会出现“套件”未声明的错误。但是然后是 CPPUNIT_TEST_SUITE 等宏可用,那么为什么会出错?我正在使用 -lstc++、-ldl 和 -lcppunit 标志进行编译。
任何帮助表示赞赏!
谢谢!