CPPUNIT实例

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对于有桩函数或者是驱动函数的函数,需要在测试代码中实现先将被测源代码中实现桩函数或驱动函数的功能。比如被测函数需要用到一个变量,则需要在测试代码中先给这个变量赋值,或者是被测函数需要桩函数先实现某个功能或达到某个条件,则需要在测试代码中先将这个前提条件满足。

       5 如果涉及数据库的代码,建议是不要用CPPUNIT来实现,其实直接用功能测试来检查结果会更快捷

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值