技术开发 频道

用cpp做C单元测试

    使用 CPPUnit
 
    你能在这里http://cppunit.sourceforge.net/得到最新的CPPUnit 版本, 你能发现所有的库 , 文献, 例子和其它有趣的材料。(我下载了版本为1.8.0 并且这个颁布工作良好)

    在Win32里, 你能在VC++ 之下(6.0 和以后版本)使用CPPUnit , 但是当CPPUnit 使用ANSI C++, 有少量接口时针对其它环境象C++Builder。

    在CPPUnit发布版本里面,所有建造库的步骤和信息,可以在INSTALL-WIN32.txt文件找到,。当所有二进制文件被构建之后, 你就能写你自己的测试集了。

    想在VC中写自己的测试程序,可以按照以下步骤:

    建立一个MFC的对话框(或文档视图结构)
    允许时间类型信息,Alt+F7 --> C/C++ --> C++ language --> Enable RTTI
    把Cppunit\inlude放到include目录:Tools - Options - Directories - Include.
    用cppunitd.lib (静态连接) 或者cppunitd_dll.lib (动态链接),testrunnerd.lib来链接你的程序。
    如果动态链接,就要把testrunnerd.dll 拷到应用程序目录来运行。
    Ok,看一下测试用例的类的定义吧。          #if !defined(DISKDATA_TESTCASE_H_INCLUDED)

        #define DISKDATA_TESTCASE_H_INCLUDED
        #if _MSC_VER > 1000
        #pragma once
        #endif // _MSC_VER > 1000
        #include <cppunit/TestCase.h>
        #include <cppunit/extensions/HelperMacros.h>
        #include "DiskData.h"
        class DiskDataTestCase : public CppUnit::TestCase
        {
            CPPUNIT_TEST_SUITE(DiskDataTestCase);
            CPPUNIT_TEST(loadTest);
            CPPUNIT_TEST(storeTest);
            CPPUNIT_TEST_SUITE_END();
            public:
            void setUp();
            void tearDown();
            protected:
            void loadTest();
            void storeTest();
            private:
            DiskData *fixture;
        };
        #endif


    首先, 必须包含TestCase.h和HelperMacros.h. 第一步,我们的从我们的Testcase基类配生的新类。第二,用一些宏使我们的定义的更方便,如 CPPUNIT_TEST_SUITE (开始测试定义), CPPUNIT_TEST (定义一个测试用例) 或 CPPUNIT_TEST_SUITE_END (结束一个测试集).

    我们的类(DiskDataTestCase)有重载了两个方法setUp()和tearDown(). 一个开始,一个结束测试。

    测试过程如下

    启动程序

    点击“Run”

    调用Call setUp()方法: 构建我们的测试对象fixture

    调用第一个测试方法

    调用tearDown() 方法,清除对象

    调用Call setUp()方法: 构建我们的测试对象fixture

    调用第一个测试方法

    调用Call setUp()方法: 构建我们的测试对象fixture

    就像下面的形式:          #include "DiskDataTestCase.h"
        CPPUNIT_TEST_SUITE_REGISTRATION(DiskDataTestCase);
        void DiskDataTestCase::setUp()
        {
            fixture = new DiskData();
        }
        void DiskDataTestCase::tearDown()
        {
            delete fixture;
            fixture = NULL;
        }
        void DiskDataTestCase::loadTest()
        {
            // our load test logic
        }
        void DiskDataTestCase::storeTest()
        {
            // our store test logic
        }

0
相关文章