发布新日志

  • CppUnit--面向C++的测试框架

    2007-09-29 15:54:04

       CppUnit是自动化单元测试框架的c++实现版本。它是XUnit(包括如JUnit,PythonUnit,DelphiUnit等)家族中的一员,是一个专门面向C++的测试框架。CppUnit 是个基于 LGPL 的开源项目,最初版本移植自 JUnit,是一个非常优秀的开源测试框架。CppUnit 和 JUnit 一样主要思想来源于极限编程(XProgramming)。主要功能就是对单元测试进行管理,并可进行自动化测试。

    一. CppUnit 的原理

    在 CppUnit 中,一个或一组测试用例的测试对象被称为 Fixture(设施,下文为方便理解尽量使用英文名称)。Fixture 就是被测试的目标,可能是一个对象或者一组相关的对象,甚至一个函数。

    有了被测试的 fixture,就可以对这个 fixture 的某个功能、某个可能出错的流程编写测试代码,这样对某个方面完整的测试被称为TestCase(测试用例)。通常写一个 TestCase 的步骤包括:

    1. 对 fixture 进行初始化,及其他初始化操作,比如:生成一组被测试的对象,初始化值;
    2. 按照要测试的某个功能或者某个流程对 fixture 进行操作;
    3. 验证结果是否正确;
    4. 对 fixture 的及其他的资源释放等清理工作。

    对 fixture 的多个测试用例,通常(1)(4)部分代码都是相似的,CppUnit 在很多地方引入了 setUp 和 tearDown 虚函数。可以在 setUp 函数里完成(1)初始化代码,而在 tearDown 函数中完成(4)代码。具体测试用例函数中只需要完成(2)(3)部分代码即可,运行时 CppUnit 会自动为每个测试用例函数运行 setUp,之后运行 tearDown,这样测试用例之间就没有交叉影响。

    对 fixture 的所有测试用例可以被封装在一个 CppUnit::TestFixture 的子类(命名惯例是[ClassName]Test)中。然后定义这个fixture 的 setUp 和 tearDown 函数,为每个测试用例定义一个测试函数(命名惯例是 testXXX)。

    下面是个简单的例子:

     class MathTest : public CppUnit::TestFixture {
     protected:
       int m_value1, m_value2;
     public:
       MathTest() {}
    	// 初始化函数
       void setUp () {
         m_value1 = 2;
         m_value2 = 3;
       }
       // 测试加法的测试函数
       void testAdd () {
       		// 步骤(2),对 fixture 进行操作
         int result = m_value1 + m_value2;
         	// 步骤(3),验证结果是否争取
         CPPUNIT_ASSERT( result == 5 );
       }
       // 没有什么清理工作没有定义 tearDown. 
     }
    先写到这里,明天补充。

    http://www.vckbase.com/document/viewdoc/?id=1258

    http://www-128.ibm.com/developerworks/cn/linux/l-cppunit/index.html

    http://www.evocomp.de/tutorials/tutorium_cppunit/howto_tutorial_cppunit_en.html

数据统计

  • 访问量: 2272
  • 日志数: 7
  • 书签数: 1
  • 建立时间: 2007-04-17
  • 更新时间: 2007-12-26

RSS订阅

Open Toolbar