当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

使用cppunit为c++工程做单元测试


    用cppunit做单元测试的结构

    学校的项目已经进入到了设计阶段,我参加的是web service的部分。这部分为了和core部分连接所以选择用c++来实现。于是看了一些有关针对c++的单元测试的framework,发现cppunit还是比较简单好用的。

    第一步:如何安装 (我的运行环境: debian Linux, gcc)
    cppunit 的安装是相当标准的linux的安装过程
    a. 下载cppunit的源文件
    b. 解压缩
    c. 编译安装程序
      $./configure -prefix=/home/me
      $make
      $make install
    这里 -prefix=/home/me的意思是把安装的根目录设置为/home/me(我的私人目录, 我不是管理员所以只好安装到自己的“家“了).
    安装完成以后头文件存储在/home/me/include,库文件存储在/home/me/lib。
    因为不是安装在默认的位置所以在编译和连结的时候要指定路径。
    例如:g++ -g -L/home/me/lib -lcppunit -ldl -I/home/me/include Main.C

    第二步: 下面我介绍一下个人认为比较实用的测试程序的结构。
    这个测试类从CppUnit::TestFixture派生,并且由下面的部分组成:
    a. setUp() 方法
       在这个方法里实现一些准备工作,例如生成一些被测类的实列
       setUp(){
          mc1 = new MyClass();
       }
    b. tearDown() 方法
       在这个方法里实现扫尾的工作,例如释放内存
       tearDown(){
          delete mc1;
       }
    c. 测试方法的方法
       例如,在被测类里有一个方法叫做:bool operator==(MyComplex &a), 我们
    要写一个名字叫作test_Equality的方法来测试。
      void test_Equality() {
        CPPUNIT_ASSERT( *mc1 == *mc2 );
        CPPUNIT_ASSERT( !(*mc1 == *mc3) );
      }
    CPPUNIT_ASSERT用来判断里面的表达是是否为真。
    d. 把几个测试方法“打包”为一个suite。
      static CppUnit::Test *suite(){
        CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite("TMyComplex");
        suiteOfTests->addTest(new CppUnit::TestCaller
            ("testEquality",
             &TMyComplex::testEquality));

        return suiteOfTests;
      }
    测试类就是由这些方法组成, 下面是如何运行测试类的主程序:
      CppUnit::TextUi::TestRunner runner;
      runner.addTest(TMyComplex::suite());
      runner.run();
      return 0;
    测试是由TestRunner来执行的。
    由于很多的工作都是比较固定的,所以我写了一个Perl脚本,这个脚本可以
    自动生成一个测试类的框架。

相关内容
赞助商链接