利用cppunit实现测试的方法

 

前提是需要从源代码中导出一个lib库文件夹,一个include文件夹,还有一个src文件夹防盗配置库里。

一、建立一个基于console测试程序:

1 新建一个 console application 工程

2、在主函数前面添加引入

#include <cppunit/CompilerOutputter.h>

#include <cppunit/extensions/TestFactoryRegistry.h>

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

using namespace cpppunit

主函数:main()

{ CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest();

  CPPUNIT_NS::TextUi::TestRunner runner;

runner.addTest( suite );

runner.setOutputter(new CPPUNIT_NS::CompilerOutputter( &runner.result(),std::cerr) );

  bool wasSucessful = runner.run();

char bb;

scanf("bb",&bb);

 return wasSucessful ? 0 : 1;

}

***如果在宏前面添加上 using namespace cppunit; 那么就不需要绿色的部分。******

 

3测试类的建立(testcase的建立)

3.1.h文件

#ifndef testcase_H

#define testcase_H

#include <cppunit/extensions/HelperMacros.h>// 添加的引入库文件

class testcase : public CPPUNIT_NS::TestFixture

{

  CPPUNIT_TEST_SUITE( testcase );//创建测试suit

  CPPUNIT_TEST(testsum );        //添加测试用例testcase,可以添加多个testcase

  CPPUNIT_TEST_SUITE_END();      // 结束创建suit

public:

         testcase(void);

         ~testcase(void);

  void setUp();   //初始化

  void tearDown(); //结束,对初化的资源进行回收

  void testsum();   //申明测试用例testcase

};

#endif

 

3.2、定文件.cpp文件的建立

#include“被测试工程的头文件”

#include "../stg/kuy.cpp"

CPPUNIT_TEST_SUITE_REGISTRATION( testcase );  //注册testsuit

testcase::testcase(void)

{  }

testcase::~testcase(void)

{}

void testcase::setUp()

{  }

void testcase::tearDown()

{  }

void testcase::testsum()//定义测试用例,testcase

{

编写测试用例

** 在这里可以使用断言进行判断****

}

4 工程参数配置

   1 在属性下linker/input/Additional Dependecies下添加 cppunitd_dll.lib

   2 在属linker/general/Additional Library Directories下添加从配置库生成的lib文件夹

   3 在属性[C/C++]/general/Additional include Directories下添加生成的include文件夹。

   4 在属性[C/C++]/code generation/runtime Library 设定Multi-threaded debug dll/MDd

   5在属性[C/C++]/language/enable run-time type info 设定成yes

   6 post-build step’,选择All Configurations,在‘post-build command(s)’中增加一个命令‘$(TargetPath)’。

    这样CppUnit在项目编译完后会进行自动的测试。

 

*** 对于第四条针对debugrelease分别设置为‘Multithreaded DLL’和‘Debug Multithreaded DLL****

****被测试工程头文件的引用,对于dll工程include的是.h文件,对于.exe工程include的是.cpp文件****

 

 

 

 

 

 

二、建立一个基于gui/MFC测试工程

1 建立基于MFC applicationdialog based)的工程。

2VC新建基于MFC测试框的Project,stdafx.h中添加

              #include <cppunit/ui/mfc/TestRunner.h>
     
        #include <cppunit/extensions/TestFactoryRegistry.h>
     
         #include <cppunit/extensions/HelperMacros.h>

              #ifdef _DEBUG
            
  #pragma comment( lib, "testrunnerd.lib" )
            
  #pragma comment( lib, "CppUnitd.lib" )
     
         #else
           
  #pragma comment( lib, "testrunner.lib" )
           
  #pragma comment( lib, "CppUnit.lib" )
     
        #endif

             using namespace CppUnit;

***如果在宏前面添加上 using namespace cppunit; 那么就不需要绿色的部分。******

 

3.修改对话框初始化函数

      CUnitTestApp::InitInstance()
     {
      
  cppunit::MfcUi::TestRunner runner;
       
cppunit::runner.addTest( cppunit::TestFactoryRegistry::getRegistry("SamepleUnitTest").makeTest() );                                  //添加测试
        runner.run();
                   //show UI

       

        /*
        CUnitTestDlg dlg;
         m_pMainWnd = &dlg;
         INT_PTR nResponse = dlg.DoModal();
         if (nResponse == IDOK)

         {......}*/    //在原程序中需要注释掉的地方。

 

4将要测试project加入到本project中,实现测试用例

4.1 测试类头文件

        class CSamepleTestCase : public cppunit::TestCase   //定义测试类继承了TestCase
        {
         public:
             CSamepleTestCase(void);
             virtual ~CSamepleTestCase(void);

             CPPUNIT_TEST_SUITE(CSamepleTestCase); //开始创建一个testsuit
             CPPUNIT_TEST( TestAdd );
         //添加测试用例testcase
             CPPUNIT_TEST_SUITE_END();
     //结束创建testsuit
            
VOID TestAdd( );          //声明测试用例
        };

4.2 CPP文件中

        CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( CSamepleTestCase,"SamepleUnitTest" );// 断言实现testsuit的注册引号里是注册进取的测试suit

#include <另一个工程中的文件

void CSamepleTestCase::TestAdd( void )      //实现测试用例
 {
     //
这里写测试用例

     CPPUNIT_ASSERT_EQUAL( 1, 1);      //断言判断
}

5 工程参数配置

   1 在属性下linker/input/Additional Dependecies下添加 cppunitd_dll.lib

   2 在属linker/general/Additional Library Directories下添加从配置库生成的lib文件夹

   3 在属性[C/C++]/general/Additional include Directories下添加生成的include文件夹。

   4 在属性[C/C++]/code generation/runtime Library 设定Multi-threaded debug dll/MDd

   5在属性[C/C++]/language/enable run-time type info 设定成yes

   6 post-build step’,选择All Configurations,在‘post-build command(s)’中增加一个命令‘$(TargetPath)’。这样CppUnit在项目编译完后会进行自动的测试。

 

*** 对于第四条针对debugrelease分别设置为‘Multithreaded DLL’和‘Debug Multithreaded DLL****

**********对于testrunner库文件得用自己编译出来的 ***********************

****被测试工程头文件的引用,对于dll工程include的是.h文件,对于.exe工程include的是.cpp文件****

三、于被测试工程的

一个就是基于.exe工程的测试,另一个就是基于dll工程的测试,对于dll工程要求是建立的是export symbols类型的。

在拿来测试工程后,需要把它的工程属性中的link/general下的output设置成测试用例所在的工程文件夹下。对于俄.exe输出类型是.exe,对于dll类型的文件输出类型是.dll

     如果某个工程需要的另外文件也需要拷贝到测试工程文件夹下。

 

四、提供的断言:

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) //
expectedactual间的差大于delta


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

明的是,CppUnit所用的动态运行期线动态库,因此你的测试序也得使用相应得设置,否生冲突

 

开发中可以根据实际情况作出选择src文件,打CppUnitLibraries.dsw。分别编译这两个project出位置均lib文件
  另外一个需要注的projectTestRunner,它出一个dll,提供了一个基于GUI 方式的测试环境,即前面提到的两种测试环境之一。也需要编译这project出位置亦lib文件 了方便开发,把编译出来的lib和dll(包括Debug版和Release版) copy 到自己建立的一个文件(当然也可以不这么),例如F:/cppunit1.9.0/lib/,同也把CppUnit源代include文件copy到我自己的include文件下。然后在VC的tools/options/directories/include files和library files中include路径和lib路径。最后忘了在自己的project中link正确的lib。

lib文件夹里共有十个文件。

但最简单的方法是在操作系Path中添TestRunner.dll的路径

     也就是上面的工程设置里的23

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值