全局变量可以在不同层(不同工程)之间使用吗? 回调函数呢?
全局变量可以在不同层(不同工程)之间使用吗? 回调函数呢?
请教一个问题,不知道能不能实现:
我把问题抽象化,给大家讲讲:
1. 现在有一个比较复杂的程序,包括三个部分:
a. 最底层调用了CppUnit 库进行测试
b. 然后上面封装了一层UI, 做了一个用户界面,可以使用此界面控制底层的测试
以及输出测试报告
c. 最上面编写了测试用例,编译后可以被加载到图形界面工具中,进行测试
2. 现在的问题是需要在最后的报告中输出一段字符串,解释整个测试的目的及详细
信息。这段字符串是在测试用例的头文件中声明定义的。无法修改 c. 测试用例部
分的代码,因为这部分的API定下来了(原来有许多测试用例已经这么写了,无法
改动这上千个测试用例部分的代码)
3. 我的想法是在CppUnit最底层的地方某个宏定义中记录下输出的字符串。因为每次
要输出信息时测试用例头文件里就要调用此宏来输出信息。
问题是:有没有这么定义全局变量的? 在最底层定义一个全局变量来存储字符串,
在UI生成报告时加上存储的字符串,然后输出到报告?
或者有什么别的方法,比如回调函数等等。哪里可以找到回调函数的示例呢?想参考
一下,网上关于回调函数众说纷纭,请大家帮忙!
/// a. 最底层宏定义,输出std::string anStr(info); 的字符串
#define BEGIN_PRINTDOC \
private: \
static void print_doc() \
{
////////////////////////////////////////////////////////////////////////
#define PRINTDOC(info){ \
std::string anStr(info); \
CPPUNIT::MyListener::myInstance()->addInfo( "PRINTDOC", anStr.c_str()); \
}
////////////////////////////////////////////////////////////////////////
#define END_PRINTDOC \
} \
public:
/// c. 测试用例头文件中,用到上面的宏,却无法输出信息,因为此时还没有注册CppUnit
/// 的测试。注册CppUnit的测试在测试用例的cpp文件里,不在头文件中。
/// 如果把以下宏加到.cpp文件中输出信息就一点问题都没有,可是此测试用例头文件又
/// 不能改动!
class SampleTestCase : public CPPUNIT::TestFixture
{
BEGIN_PRINTDOC
PRINTDOC("doucumentation infomation");
END_PRINTDOC
.......................
}