写在引言之前:
网上这方面的资料参差不齐,有的还有错误(诸如路径),始终没有完全解决我的CPPUNIT测试框架搭建的问题,如果你也遇到了,那么或许本文会有点帮助。
引言:
在公司有软件测试项目,但是不能把工作拿回家做。要在自己的笔记本上搭建CPPUNIT框架环境,还真是花费了好长时间。下面将以最全最简单的方式介绍本次从零搭建的全过程。水平有限,仅限参考。
一、准备工作:
1、VS2005肯定要安装,这个自行解决。
2、下载且仅下载cppunit 1.12.1,但不用下载CPPUnitProjectWizard。自行下载,或尝试文末的下载链接。
二、CPPUNIT的编译、生成
1、将下载好的压缩包解压缩,比如本文压缩到D:\cppunit-1.12.1。在cppunit-1.12.1\src目录下,有VS工程CppUnitLibraries.dsw,双击打开之,出现版本转换对话框,选择“全是”。
2、打开工程后,红框中选择Debug(这样是防止Lib中生成出现多余的文件),然后在左侧中5个红框中的项目右键->重新生成解决方案。可以逐个项目右键->重新生成解决方案,也可以将DSPPlugIn移除之后,在解决方案上右键->重新生成解决方案。本文采用后者。cppunit-1.12.1\lib不编译DSPPlugIn是因为编译有错误,也没有必要编译。
生成解决方案之后,提示是5个成功生成:
可以看到cppunit-1.12.1\lib文件夹下多出来几个文件,而且都是刚刚生成的,
至此,CPPUNIT准备完毕!不必设置什么麻烦的环境变量和CPPUnitProjectWizard!
三、VS2005工程搭建
这里有个一定需要注意的地方:在VS2005,选择新建->项目,不能选择常规->空项目!笔者就是因为开始选择常规->空项目,导致出现不能Debug的情况,而且怎么都搜不到解决办法,浪费了一天的时间!
1、在VS2005中选择新建->项目,在Visual C++下面选择Win32-> Win32 控制台应用程序。输入工程名称后点击确定
2、将CPPUNIT复制到工程目录
可以将cppunit-1.12.1整个文件夹复制到工程文件夹下,也可以只复制include和lib,本文选择后者。因为只需要用到include和lib,文件少便于工程的搬移。
3、设置VS工程
有且仅有三处需要设置:
A、打开VS项目->属性->配置属性,在C/C++的附加包含目录中设置路径:"..\cppunit-1.12.1\include"
B、在链接器的附加库目录中设置路径:"..\cppunit-1.12.1\lib"
C、在链接器->输入的附加依赖项中设置:cppunitd.lib和testrunnerd.lib
4、添加CPPUNIT文件
CPPUNIT文件共有三个:CExampleTest.cpp、CExampleTest.h、main.cpp。
CExampleTest.cpp文件:
#include "CExampleTest.h"
#include "Monkey.h"
// 注册测试套到CppUnit
CPPUNIT_TEST_SUITE_REGISTRATION( CExampleTest );
void CExampleTest::setUp()
{
}
// tearDown: 在每个用例后执行一次
void CExampleTest::tearDown()
{
}
void CExampleTest::TestCase01()
{
Point Walls[] = {{0, 2}, {1, 2}, {2, 2}, {4, 1}, {5, 1}};
RoomInfo info = MonkeyGo(6, 4, sizeof(Walls)/sizeof(Walls[0]), Walls);
CPPUNIT_ASSERT(info.trap_num == 2);
CPPUNIT_ASSERT(info.unreachable_num == 3);
}
CExampleTest.h文件:
#ifndef _CEXAMPLE_TEST_H
#define _CEXAMPLE_TEST_H
#include <cppunit/extensions/HelperMacros.h>
class CExampleTest : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(CExampleTest);
CPPUNIT_TEST(TestCase01);
CPPUNIT_TEST_SUITE_END();
public:
void setUp();
void tearDown();
void TestCase01();
};
#endif /*_CEXAMPLE_TEST_H*/
main.cpp文件:
#include <cppunit/TextOutputter.h>
#include <cppunit/XmlOutputter.h>
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
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("All Tests").makeTest() );
runner.run( controller );
// Print test in a text format.
CPPUNIT_NS::TextOutputter outputter( &result, CPPUNIT_NS::stdCOut() );
outputter.write();
// This for XML output
std::ofstream file( "TestResult.xml" );
CPPUNIT_NS::XmlOutputter xml( &result, file );
xml.setStyleSheet( "report.xsl" );
xml.write();
file.close();
return result.wasSuccessful() ? 0 : 1;
}
Monkey.cpp:
#include <Monkey.h>
#include <stdio.h>
#include <malloc.h>
RoomInfo MonkeyGo(unsigned int x, unsigned int y, unsigned int num, Point Walls[])
{
RoomInfo roomInfo = {0, 0};
return roomInfo;
}
Monkey.h :
#ifndef _MONKEY_H_
#define _MONKEY_H_
typedef struct
{
unsigned int x;
unsigned int y;
}Point;
typedef struct
{
unsigned int unreachable_num;
unsigned int trap_num;
}RoomInfo;
RoomInfo MonkeyGo(unsigned int x, unsigned int y, unsigned int num, Point Walls[]);
#endif
5、编译链接,运行如下
6、下载地址
http://download.csdn.net/detail/pkcfl/9584306