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

4. 常用使用方式

按照上面的方式,如果要添加新的测试用例,需要把每个测试用例添加到 TestSuite 中,而且添加新的 TestFixture 需要把所有头文件添加到 main.cpp 中,比较麻烦。为此 CppUnit 提供了 CppUnit::TestSuiteBuilder,CppUnit::TestFactoryRegistry 和一堆宏,用来方便地把 TestFixture 和测试用例注册到 TestSuite 中。下面是通常的使用方式:

    /// MathTest.h 
    // A TestFixture subclass. 
    // Announce: use as your owner risk. 
    // Author  : liqun (liqun@nsfocus.com) 
    // Data    : 2003-7-5 
    #include "cppunit/extensions/HelperMacros.h" 
    class MathTest : public CppUnit::TestFixture { 
        // 声明一个TestSuite 
        CPPUNIT_TEST_SUITE( MathTest ); 
        // 添加测试用例到TestSuite, 定义新的测试用例需要在这儿声明一下 
        CPPUNIT_TEST( testAdd ); 
        // TestSuite声明完成 
        CPPUNIT_TEST_SUITE_END(); 
        // 其余不变 
    protected: 
        int m_value1, m_value2; 
         
    public: 
        MathTest() {} 
         
        // 初始化函数 
        void setUp (); 
        // 清理函数 
        void tearDown(); 
         
        // 测试加法的测试函数 
        void testAdd (); 
        // 可以添加新的测试函数 
    }; 
    /// MathTest.cpp 
    // A TestFixture subclass. 
    // Announce: use as your owner risk. 
    // Author  : liqun (liqun@nsfocus.com) 
    // Data    : 2003-7-5 
    #include "MathTest.h" 
    // 把这个TestSuite注册到名字为"alltest"的TestSuite中, 如果没有定义会自动定义 
    // 也可以CPPUNIT_TEST_SUITE_REGISTRATION( MathTest );注册到全局的一个未命名的TestSuite中. 
    CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MathTest, "alltest" ); 
    // 下面不变 
    void MathTest::setUp() 
    { 
         m_value1 = 2; 
         m_value2 = 3; 
    } 
    void MathTest::tearDown() 
    { 
    } 
    void MathTest::testAdd() 
    { 
         int result = m_value1 + m_value2; 
         CPPUNIT_ASSERT( result == 5 ); 
    } 
    /// main.cpp 
    // Main file for cppunit test. 
    // Announce: use as your owner risk. 
    // Compile : g++ -lcppunit MathTest.cpp main.cpp 
    // Run     : ./a.out 
    // Test    : RedHat 8.0 CppUnit1.8.0 
    // Author  : liqun ( a litthle modification. liqun@nsfocus.com) 
    // Data    : 2003-7-5 
    // 不用再包含所有TestFixture子类的头文件 
    #include <cppunit/extensions/TestFactoryRegistry.h> 
    #include <cppunit/ui/text/TestRunner.h> 
    // 如果不更改TestSuite, 本文件后期不需要更改.  
    int main() 
    { 
        CppUnit::TextUi::TestRunner runner; 
         
        // 从注册的TestSuite中获取特定的TestSuite, 没有参数获取未命名的TestSuite. 
        CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry("alltest"); 
    <!-- code sample is too wide -->  // 添加这个TestSuite到TestRunner中 
        runner.addTest( registry.makeTest() ); 
        // 运行测试 
        runner.run(); 
    } 

这样添加新的测试用例只需要在类定义的开始声明一下即可。

5. 其他实际问题

通常包含测试用例代码和被测试对象是在不同的项目中。应该在另一个项目(好在不同的目录)中编写 TestFixture,然后把被测试的对象包含在测试项目中。

对某个类或者某个函数进行测试的时候,这个 TestFixture 可能引用了别的类或者别的函数,为了隔离其他部分代码的影响,应该在源文件中临时定义一些桩程序,模拟这些类或者函数。这些代码可以通过宏定义在测试项目中有效,而在被测试的项目中无效。

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