3) UNIX平台
在UNIX平台下先从http://www.sourceforge.net 获得安装包,解压后在CPPUNIT的目录依次操作:
./configure //生成Makefile文件
./make
./make install //将生成的库文件复制到/user/local/lib目录下,如果没有目录的安装权限,可以指定到自己的目录下。
将安装包include/cppunit 目录复制到/usr/include目录下,里面是cppunit的头文件。
网上有很多资料都说make install之后要在共享动态库配置文件中将lib文件的目录加进去,但如果编译出来的是静态库文件,则可省略了。
四、实例一
以下以一个helloworld的实例讲解CPPUNIT的使用,以下例子仅作参考,注释部分表达得不很严谨,仅作参考。
#include "cppunit/Portability.h"
#include "cppunit/TestAssert.h"
#include "cppunit/extensions/TestFactoryRegistry.h"
#include "cppunit/extensions/HelperMacros.h"
#include "cppunit/TestResult.h"
#include "cppunit/TestRunner.h"
#include "cppunit/TestResultCollector.h"
#include "cppunit/BriefTestProgressListener.h"
class Test:public CPPUNIT_NS::TestCase //定义测试用例
{
CPPUNIT_TEST_SUITE(Test); //创建一个suite,并将Test添加到suite
CPPUNIT_TEST(testHelloWorld); //声明一个测试用例testHelloWorld,如果需要增加测试用例也需要在这里声明。
CPPUNIT_TEST_SUITE_END(); //结束suite声明
public:
void setUp(void) //CPPUNIT提供的初始化方法,将需要初始化的变量等在这里定义赋值。类似于构造函数,在执行testcase之前自动调动。
本实例没有需要初始化的变量。
{
}
void tearDown(void) //CPPUNIT提供的结束testcase执行完之后自动运行的方法,如,需要清除的指针等。testcase执行完后自动调用,类似于虚构函数。本例不需要作清除工作,也可以不定义
{
}
protected:
void testHelloWorld(void){ //测试用例testHelloWorld,如果需要增加测试用例,可以继续添加
printf("Hello,World!\n");
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(Test); //通过宏注册Test到test suite
int main()
{
CPPUNIT_NS::TestResult controller; //保存测试结果
CPPUNIT_NS::TestResultCollector result; //收集测试用例的执行结果,它能够区分测试用例执行结果是false或是出现了错误。
controller.addListener(&result);
CPPUNIT_NS::BriefTestProgressListener progress;
controller.addListener(&progress);
CPPUNIT_NS::TestRunner runner; // TestRunner用于执行测试用例,它将待执行的测试对象管理起来,然后供用户调用
runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());
runner.run(controller);
return result.wasSuccessful()?0:-1; //反回用例的执行结果,如果成功返回0失败返回-1
}
说明:
1.如CPPUNIT_TEST_SUITE_REGISTRATION()是CPPUNIT本身带有的宏,可以要下载cppunit-docs-1.10.2包,在这里可以查阅到函数,宏及包含的头文件。
2.CppUnit 提供了多种验证成功失败的方式:
CPPUNIT_ASSERT(condition) // 确信condition为真
CPPUNIT_ASSERT_MESSAGE(message, condition)
// 当condition为假时失败,并打印message
CPPUNIT_FAIL(message) // 当前测试失败