zoukankan      html  css  js  c++  java
  • VS2005配置CPPUnit进行单元測试

    一、 编译CPPUnitproject

    1、  解压文件cppunit-1.12.1.tar.gz。

    2、  编译$BASE/src/cppunit/CppUnitLibraries.dsw中的cppunit_dll项目。这是CPPUnit基本类库。Release和debug版本号须要同一时候编译。

    3、  编译$BASE/src/cppunit/CppUnitLibraries.dsw中的TestRunner项目。这是使用MFC的图形化界面的类库。Release和debug版本号须要同一时候编译。

    注意:若使用VS2005编译,可能出现:

    error C1104: fatal error importing libid: '80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2'

    错误提示。仅仅须要将当中7.0改为相应版本号,比方8.0,又一次编译就可以。

    4、  将编译生成的*.lib 和 *.dll 复制到目标程序运行文件夹下,在stdafx.h中添加例如以下代码:

    #ifndef _DEBUG

    #pragma comment(lib, "..//Debug//cppunit_dll.lib")

    #pragma comment(lib, "..//Debug//TestRunner.lib")

    #else

    #pragma comment(lib, "..//Release//cppunit_dll.lib")

    #pragma comment(lib, "..//Release//TestRunner.lib")

    #endif

    5、  通过菜单[Tools]à[Options],弹出对话框。Projects and Solutions中添加Include Files为$BASE/include。

    二、 不使用辅助宏的CPPUnit用法

    1、  新建一个基于对话框的MFC程序。

    project名为CPPUnit。

    2、  依照第一步的4、5步骤(也能够直接在project中设置),使程序包括CPPUnit的头文件和编译时须要的*.lib文件。

    以及执行时须要的*.dll文件。

    3、  添加C++类,CPlusTest,代码例如以下:

    .h 文件

    view plaincopy to clipboardprint? 
    #pragma once   
    #include <cppunit/TestFixture.h>   
    #include <cppunit/TestAssert.h>   
    class CPlusTest : public CppUnit::TestFixture   
    {   
    public:   
        CPlusTest(void);   
        virtual ~CPlusTest(void);   
        void setUp();   
        void tearDown();   
        void TestEqual1();   
        void TestEqual2();   
    private:   
        int x;   
        int y;   
    };  
    #pragma once

    #include <cppunit/TestFixture.h> 
    #include <cppunit/TestAssert.h>

    class CPlusTest : public CppUnit::TestFixture 

    public: 
        CPlusTest(void); 
        virtual ~CPlusTest(void);

        void setUp(); 
        void tearDown(); 
        void TestEqual1(); 
        void TestEqual2();

    private: 
        int x; 
        int y; 
    };

    .cpp 文件

    view plaincopy to clipboardprint? 
    #include "StdAfx.h"   
    #include "PlusTest.h"   
    CPlusTest::CPlusTest(void)   
    {   
    }   
    CPlusTest::~CPlusTest(void)   
    {   
    }   
    void CPlusTest::setUp()   
    {   
        x = 1;   
        y = 2;   
    }   
    void CPlusTest::tearDown()   
    {   
        x = 0;   
        y = 0;   
    }   
    void CPlusTest::TestEqual1()   
    {   
        CPPUNIT_ASSERT(x + y == 4);   
    }   
    void CPlusTest::TestEqual2()   
    {   
        CPPUNIT_ASSERT(x + y == 3);   
    }  
    #include "StdAfx.h" 
    #include "PlusTest.h"

    CPlusTest::CPlusTest(void) 

    }

    CPlusTest::~CPlusTest(void) 

    }

    void CPlusTest::setUp() 

        x = 1; 
        y = 2; 
    }

    void CPlusTest::tearDown() 

        x = 0; 
        y = 0; 
    }

    void CPlusTest::TestEqual1() 

        CPPUNIT_ASSERT(x + y == 4); 
    }

    void CPlusTest::TestEqual2() 

        CPPUNIT_ASSERT(x + y == 3); 
    }

        说明:

    1)  測试类一般继承自TestFixture,它用来表示一个測试对象,用来组织測试用例。

    2)  在每一个測试用例运行之前。其所属类的setUp都会运行。之后,其所属类的tearDown都会运行。对本例而言。运行TestEqual1之前会运行setUp,之后会运行tearDown;运行TestEqual2之前也会运行setUp,之后也会运行tearDown。

    3)  CPPUNIT_ASSERT用来推断括号内的值是true或者false。假设true,则表示測试成功;否则表示測试失败。

    也有一些别的宏能够使用。

    4、  在CPPUnit.cpp中增加下面头文件:

    #include <cppunit/ui/mfc/TestRunner.h>

    #include <cppunit/testCaller.h>

    #include <cppunit/TestSuite.h>

    #include <cppunit/TestResult.h>

    在InitInstance()函数中增加下面代码:

    view plaincopy to clipboardprint? 
    CppUnit::MfcUi::TestRunner runner;   
    CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("test");   
    CppUnit::TestCaller<CPlusTest>*pTest1=new CppUnit::TestCaller<CPlusTest>("TestEqual1", &CPlusTest::TestEqual1);   
    CppUnit::TestCaller<CPlusTest>*pTest2=new CppUnit::TestCaller<CPlusTest>("TestEqual2", &CPlusTest::TestEqual2);   
    pSuite->addTest(pTest1);   
    pSuite->addTest(pTest2);   
    runner.addTest(pSuite);   
    runner.run();  
    CppUnit::MfcUi::TestRunner runner;

    CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("test");

    CppUnit::TestCaller<CPlusTest>*pTest1=new CppUnit::TestCaller<CPlusTest>("TestEqual1", &CPlusTest::TestEqual1);

    CppUnit::TestCaller<CPlusTest>*pTest2=new CppUnit::TestCaller<CPlusTest>("TestEqual2", &CPlusTest::TestEqual2);

    pSuite->addTest(pTest1);

    pSuite->addTest(pTest2); 
    runner.addTest(pSuite);

    runner.run();

    说明:

    1)       test suite和test case分别相应着树枝和树叶,runner相应着树根。test suite能够包括别的test suite,runner也能够直接包括test case。

    2)       TestRunner、TestSuite 、TestCaller删除子集合的时候都使用delete,子集合都应该使用new 分配,然后加入到子集合中。

    5、 删除显示对话框的代码!执行后显示界面为:

    图1.1 CPPUnit执行界面

    三、 使用辅助宏的CPPUnit用法

    上述的方法在主函数中做大量加入test suite和test case的操作。操作比較烦琐,为了简化,CPPUnit提供了一些宏。

    1、  改进測试类,加入下面代码:

    CPPUNIT_TEST_SUITE(CPlusTest);

    CPPUNIT_TEST(TestEqual1);

    CPPUNIT_TEST(TestEqual2);

    CPPUNIT_TEST_SUITE_END();

    说明:

    1)       要在类的最开头。即public前面加上这些语句。

    该类的TestEqual1和TestEqual2分别作为一个test case放在一个test suite中。该test suite的名称是类的名称,即“CPlusTest”。

    2)       #include <cppunit/TestFixture.h>

    #include <cppunit/extensions/HelperMacros.h>

    2、  測试类相应的CPP文件開始增加:

    CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTest, "plusTest");

    说明:表示加入该类相应的suite(“CPlushTest”)到一个名字是plusTest的test suite。同一时候plusTest这个test suite会被注冊。另外,也能够使用

    CPPUNIT_TEST_SUITE_REGISTRATION(CPlusTest);

    将该类相应的suite增加到默认的test suite中(“All Tests”)。

    3、  在Initance()函数中增加例如以下代码:

    CppUnit::MfcUi::TestRunner runner;

    CppUnit::Test* pSuite = CppUnit::TestFactoryRegistry::getRegistry("plusTest").makeTest();

    runner.addTest(pSuite);

    runner.run();

    说明:

    图形化界面中包括了三层树结构。第一层是plusTest,第二层是CPlusTest。第三层是TestPlus1和TestPlus2。能够给getRegistry不指定參数使用默认注冊的test case,即“All Tests”。


    转自:http://qiusuoge.com/7660.html

  • 相关阅读:
    c语言,strcat(),字符串拼接
    c语言,strcpy
    [置顶] linux第二天,g++,gcc,ps,cat,sort,grep,kill,less,ls -l ,
    Yuchuan_Linux_C 编程之四动态库(共享库)制作
    Yuchuan_Linux_C 编程之三 静态库的制作和使用
    Yuchuan_Linux_C编程之二 GCC编译
    Yuchuan_Linux_C编程之一 Vim编辑器的使用
    testng学习笔记-- beforesuit和aftersuit
    testng学习笔记-- beforeclass和afterclass
    pom.xml
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5351451.html
Copyright © 2011-2022 走看看