您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > cppUnit
便利的开发工具CppUnit快速使用指南
作者:网络转载 发布时间:[ 2013/7/16 10:31:18 ] 推荐标签:

对 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.  
     } 

在测试函数中对执行结果的验证成功或者失败直接反应这个测试用例的成功和失败。CppUnit 提供了多种验证成功失败的方式:

    CPPUNIT_ASSERT(condition)                   // 确信condition为真 
    CPPUNIT_ASSERT_MESSAGE(message, condition)  // 当condition为假时失败, 并打印message 
    CPPUNIT_FAIL(message)                       // 当前测试失败, 并打印message 
    CPPUNIT_ASSERT_EQUAL(expected, actual)      // 确信两者相等 
    CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual) // 失败的同时打印message 
    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta)   // 当expected和actual之间差大于delta时失败 

要把对 fixture 的一个测试函数转变成一个测试用例,需要生成一个 CppUnit::TestCaller 对象。而终运行整个应用程序的测试代码的时候,可能需要同时运行对一个 fixture 的多个测试函数,甚至多个 fixture 的测试用例。CppUnit 中把这种同时运行的测试案例的集合称为 TestSuite。而 TestRunner 则运行测试用例或者 TestSuite,具体管理所有测试用例的生命周期。目前提供了 3 类TestRunner,包括:

    CppUnit::TextUi::TestRunner     // 文本方式的TestRunner 
    CppUnit::QtUi::TestRunner       // QT方式的TestRunner 
    CppUnit::MfcUi::TestRunner      // MFC方式的TestRunner 

下面是个文本方式 TestRunner 的例子:

    CppUnit::TextUi::TestRunner runner; 
    CppUnit::TestSuite *suite= new CppUnit::TestSuite(); 
     
    // 添加一个测试用例 
    suite->addTest(new CppUnit::TestCaller<MathTest> ( 
                  "testAdd", testAdd)); 
     
    // 指定运行TestSuite  
    runner.addTest( suite ); 
    // 开始运行, 自动显示测试进度和测试结果 
    runner.run( "", true );    // Run all tests and wait 

对测试结果的管理、显示等功能涉及到另一类对象,主要用于内部对测试结果、进度的管理,以及进度和结果的显示。这里不做介绍。

下面我们整理一下思路,结合一个简单的例子,把上面说的思路串在一起。

3. 手动使用步骤

首先要明确测试的对象 fixture,然后根据其功能、流程,以及以前的经验,确定测试用例。这个步骤非常重要,直接关系到测试的终效果。当然增加测试用例的过程是个阶段性的工作,开始完成代码后,先完成对功能的测试用例,保证其完成功能;然后对可能出错的部分,结合以前的经验(比如边界值测试、路径覆盖测试等)编写测试用例;后在发现相关 bug 时,根据 bug 完成测试用例。

比如对整数加法进行测试,首先定义一个新的 TestFixture 子类,MathTest,编写测试用例的测试代码。后期需要添加新的测试用例时只需要添加新的测试函数,根据需要修改 setUp 和 tearDown 即可。如果需要对新的 fixture 进行测试,定义新的 TestFixture 子类即可。注:下面代码仅用来表示原理,不能编译。

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd