编译命令: gcc -o testcppunit testcppunit.cpp -lcppunit (如果是VC/windows的话,使用cl 代替gcc--注意要配置cl的环境变量才可以在cmd命令行下使用)
在shell输入./testcppunit ,执行结果:
Test::testHelloWorldHello,world!
:OK
3 一些CppUnit的理论
1)CppUnit核心部分(core)
基本测试类:Test,TestFixture,TestCase,TestSuite
测试结果记录:SychronizedObject,TestListener,TestResult
错误处理:TestFailure,SourceLine,Execption,NotEqualException
断言:Asserter,TestAssert
2)输出部分(Ouput)
基本部件:Outputter,TestResultCollector
衍生类:TestOutputter,CompilerOutputer,XmlOutputer
3)辅助部分(Helper)
TypeInfoHelper,TestFactory,TestFactoryRegistry,NamedRegisters,TestSuiteFactory,
TesSuiteBuilder,TestCaller,AutoRegisterSuite,HelperMacros.
4)扩展部分(Extension)
TestDecorator,RepeatedTest,Orthodox,TestSetUp
5)监听者部分(Listener)
TestSucessListener,TextTestProgressListener,TextTestResult
6)界面部分(UI)
TestRunner(TextUI,MfcUI,QtUI)
7)移植(Portabilty):OStringStream
4 网上的关于CppUnit的一些资料的汇总
a)CppUnit 快速使用指南:https://www.ibm.com/developerworks/cn/linux/l-cppunit/
b)CppUnit源代码解读:http://morningspace.51.net/resource/cppunit/cppunit_anno.html
其中百度文库上有一个关于这个源码解读的doc格式的资料:http://wenku.baidu.com/view/b7fcad4bcf84b9d528ea7ae1.html
c)百度文库中还有其他类似的CppUnit的资料,但是不如上面的这两个质量高.
d)还有一个资料是CppUnit源码包中example以及相应的文档
5. 后记--关于CppUnit 1.21.1源码安装的问题的探索
源码安装时遇到问题首先是要看readme中没有没有介绍,然后看看INSTALL,FAQ,TODO中有没有解决方法,然后才到网上搜结果。
首先找到参考[3] 其中介绍了一个ldconfig命令---一个修改了/etc/ld.so.confl文件的后重来动态加载的相应动态链接库程序的路径的程序。参考[3]中描述的不适和我的机器,”修改/etc/ld.so.conf文件(动态链接库路径)并添加/usr/local/lib来增加动态加载的库的路径“,我的系统中/etc/ld.so.conf.d/*.conf中已经包含了/usr/local/lib路径。
此外,还实践了这一句:”make install没有把头文件安装到/usr/include中去,此时还需要手工去复制,只要把include下面的cppunit目录复制到/usr/include下面可以了,命令很简单,不写了。”实践命令是:
sudo cp -r cppunit /usr/include --- 这个其实也是有问题的,我后来使用locate命令在 /usr/local/iinclude中发现了cppunit目录。
其次是参考[4],我惊人的发现那个外国哥们遇到的问题和我一样,看了下面的回复后,我以为是因为没有安装libdl.so的问题,尝试安装libc6和libc6-dev(使用sudo apt-get install xxx),实际系统已经安装好了这两个库(基本构建库),看了各种奇怪的Linux发行版的路径,终于在/lib/i386-linux-gun/下发现了libdl.so.2库是存在的,为什么会编译错误,是路径的问题吗??找了一个程序实例使用一下libdl库。
/*Program:testlibdl.c -- this example test weather the libdl.so.2 is work or not*/
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
double (*desk)(char*);
char *error;
handle = dlopen ("/lib/libc.so.6", RTLD_LAZY);
if (!handle) {
fputs (dlerror(), stderr);
exit(1);
}
desk= dlsym(handle, "Apply");
if ((error = dlerror()) != NULL) {
fputs(error, stderr);
exit(1);
}
dlclose(handle);
}