CPPUNIT实例 在cppunit的写的测试代码如下,其中包含main.cpp, testw2file.cpp, testw2file.h main.cpp的代码如下:——基本上,这个main.cpp不需要修改了,即使增加了测试用例也不需要修改这部分代码。 #include "testw2file.h" int main( ) { //CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_NS::TestResult controller; CPPUNIT_NS::TestResultCollector result; controller.addListener(&result); CPPUNIT_NS::BriefTestProgressListener progress; controller.addListener(&progress); CPPUNIT_NS::TestRunner runner; runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest()); runner.run(controller); return result.wasSuccessful()?0:-1; } testw2file.h的代码如下: #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" #include "Logger.h" #include "/cxcs04/_hl/study/cppunit/testw2file/src/Write2File.cpp" //头文件把源代码文件包含进来,无须把被测试的源代码复制过来。 class W2File_Test:public CPPUNIT_NS::TestCase { CPPUNIT_TEST_SUITE(W2File_Test); CPPUNIT_TEST(testw2file); CPPUNIT_TEST_SUITE_END(); public: void setUp(void); void tearDown(void); char SrcPath[256]; protected: int t_argc ; const char *t_argv[3]; void testw2file(void); int f_num; struct stat statbuf; }; CPPUNIT_TEST_SUITE_REGISTRATION(W2File_Test); testw2file.cpp代码如下: #include "testw2file.h" void W2File_Test::setUp(void) { t_argc = 3; t_argv[0]="1"; t_argv[1]="/cxcs04/_hl/study/cppunit/testw2file/src"; t_argv[2]="/cxcs04/_hl/study/cppunit/testw2file/src"; } void W2File_Test::tearDown(void) {
} void W2File_Test::testw2file(void) { int i; FILE *fp_out=NULL; Write2File W2file; char t_outfile[256]; sprintf( t_outfile , "%s/test_out.txt" , t_argv[1] ); W2file.ReadCfgFile(t_argc , t_argv ); fp_out = fopen(t_outfile , "r"); stat( t_outfile , &statbuf ); f_num = statbuf.st_size; //测试代码获取输出文件的真实大小 printf( "outfile size =%d , srcfile size =%d/n" , f_num , W2file.fnum ); //将代码中获取的输出文件的真实大小和源代码中源文件的大小作对比(即预期值) CPPUNIT_ASSERT( f_num == W2file.fnum ); //判断两个值的大小,如果一致这个用例就是成功的。 } 如果是在unix环境下,可以写makefile文件完成程序的编译,在此顺便把我的makefile文件也贴出来: CPP =g++ -g INCL = -I/mylib/include LIBS =-L/mylib/lib -lcppunit SYSLIB = -ldl PROGRAMS = testw2file OBJS =main.o testw2file.o testw2file:${OBJS} $(CPP) $(CPPFLAG) -o $@ ${OBJS} $(LIBS) ${SYSLIB} ${INCL} clean: rm *.o testw2file 二、总结在网上有不少CPPUNIT的资料,不知道最初的出处在哪里,有一些看了也不是特别清楚要怎么去使用cppunit,实例也不一定就能真正运行起来(当然这份资料也是借鉴了很多网上同行的资料)。为了让入门者更容易上手,在这里班门弄匠地总结一下自己接触CPPUNIT的心得,上面也附了一两个实例,仅是互相学习的意思。 1 CPPUNIT其实是相当于一个框架,我们设计好了测试的方法、预期值后,将源代码放到这个框架中去执行,以检查源代码的输出是否跟预期值是相符的。 2不需要将源代码贴到测试代码中去,一般建议保持源代码和测试代码的独立性 3 对于预期值需要根据源代码的实际情况去设置,比如如果我要判断一个复制文件的函数执行是否成功,可能先要在测试代码中实现获取复制文件的大小,再将这个大小和源文件进行对比,如果一致,说明这个函数执行是成功的。因此,如何判断某个函数的执行是否成功,这个预期值应该取什么值以及要如何获得这个预期值,都是需要思考的,而且在测试代码中的实现有可能也会比较复杂。不过只要一次实现后,以后的修改就比较小了。 4对于有桩函数或者是驱动函数的函数,需要在测试代码中实现先将被测源代码中实现桩函数或驱动函数的功能。比如被测函数需要用到一个变量,则需要在测试代码中先给这个变量赋值,或者是被测函数需要桩函数先实现某个功能或达到某个条件,则需要在测试代码中先将这个前提条件满足。 |
CPPUNIT实例
最新推荐文章于 2018-03-14 09:50:19 发布