本文原载于“软件测试工具”介绍软件测试相关内容的专业博客www.mytestlife.com,任何转载均需保留原址。
前言:本博客一直关注C++test单元测试,C++test是一款专业的测试工具,除了包含单元测试还有静态规则检查,数据流分析的功能,但C++test是一款商业工具,对于一些希望通过开源方式打造单元测试环境的公司或者测试人员而言,CppUnit无疑是非常好的环境。本文分成两篇文章介绍如何在Windows和Linux上搭建CppUnit测试环境,前文“CppUnit测试环境搭建流程及示例 Windows环境"介绍了如何在Windows上搭建CppUnit测试环境,本文作为姊妹篇,介绍如何在Lin
....
一、搭建CppUnit测试环境
1. 使用环境
该测试环境的搭建是在linux环境下进行的,理论上只支持linux环境
2. 下载与安装
1) 可以在http://sourceforge.net/projects/cppunit/files/cppunit/下载最新的源码,我下载的版本为:cppunit-1.12.1.tar.gz
2) 解压cppunit-1.12.1.tar.gz(可以使用命令:tar -zxvf cppunit-1.12.1.tar.gz或者使用图形化软件解压)后,使用终端(命令形式为:cd address,address为cppunit-1.12.1目录的地址;例如我的cppunit-1.12.1目录地址为/home/xiaolait/cppunit-1.12.1,则命令形式为cd /home/xiaolait/cppunit-1.12.1)进入cppunit-1.12.1的目录
3) 在终端输入以下命令:(每一个命令都要等待几分钟)
sudo ./configure
sudo make
sudo make check
sudo make install
理论上,只有最后一条命令需要root权限,但是为了保证安装的完整进行,尽量使用以上命令。
3. 配置链接库路径
这个时候,看起来似乎已经安装配置成功了,其实不然,在动态链接库的配置文件里面并没有写入/usr/local/lib的路径,虽然可以编译过,但是你却发现会运行不了,会出现如是的错误:
./mytest: error while loading shared libraries: libcppunit-1.10.so.2: cannot open shared object file: No such file or directory
配置该动态链接库的方法有以下两种:
1) 修改环境变量
在终端输入:export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH,但是这种方法在每次关机后都会失效,需要重新配置。
2) 配置动态链接库的配置文件
在终端输入:vi /etc/ld.so.conf
在新起一行里面加入:/usr/local/lib
然后再用ldconfig命令重新装载一下配置文件就可以了,命令为:ldconfig
4. CppUnit的基本原理
1) Fixture:一个或一组测试用例的测试对象。可以是你要测试的对象或者函数。
2) TestCase:测试用例。是对测试对象的某个功能或流程编写的测试代码。对一个Fixture,可能有多个测试用例。
3) TestSuite:同时运行的测试用例的集合。可以是一个fixture的多个测试函数、也可以是多个fixture的所有测试用例。
4) 使用时,在测试的主文件中将TestCase注册到TestSuite中,并运行。
5. 实例运行
1) 编写测试程序
建立以文件名为testApp.cpp,内容如下:
#include <iostream>
#include <cppunit/TestRunner.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
class Test : public CPPUNIT_NS::TestCase
{
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testHelloWorld);
CPPUNIT_TEST_SUITE_END();
public:
void setUp(void) {}
void tearDown(void) {}
protected:
void testHelloWorld(void) { std::cout << "Hello, world!" << std::endl; }
};
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
int main( int argc, char **argv )
{
// Create the event manager and test controller
CPPUNIT_NS::TestResult controller;
// Add a listener that colllects test result
CPPUNIT_NS::TestResultCollector result;
controller.addListener( &result );
// Add a listener that print dots as test run.
CPPUNIT_NS::BriefTestProgressListener progress;
controller.addListener( &progress );
// Add the top suite to the test runner
CPPUNIT_NS::TestRunner runner;
runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
runner.run( controller );
return result.wasSuccessful() ? 0 : 1;
}
2) 编译,运行
CppUnit的编辑有两种方法
a) 链接静态库。编译命令如下:
g++ -L/usr/local/lib/libcppunit.a testApp .cpp -lcppunit -ldl -o testApp
此时会产生一个名为testApp的可执行文件,然后运行:./testApp
结果为:
Test::testHelloWorldHello, world!
: OK
b) 链接动态库。编译命令如下:
g++ testApp .cpp -lcppunit -ldl -o testApp
此时同样会产生一个名为testApp的可执行文件,然后运行:./testApp
结果同上