免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
CPPUNIT基本原理

一、CPPUNIT概念

  CPPUNIT是一個(gè)測(cè)試驅(qū)動(dòng)開發(fā)的測(cè)試框架。所謂測(cè)試驅(qū)動(dòng)開發(fā)(TDD)是一種可以在開發(fā)過(guò)程中控制憂慮感的開發(fā)方法,它堅(jiān)持以測(cè)試作為開發(fā)過(guò)程的中心,在開發(fā)前根據(jù)對(duì)將要開發(fā)的程序的要求,先寫好所有測(cè)試代碼,并且在開發(fā)過(guò)程中不斷地通過(guò)運(yùn)行測(cè)試代碼來(lái)獲得所開發(fā)的代碼與所要求的結(jié)果之間的差距。

  CPPUNIT是XUNIT的一部分,它是由JUNIT演變過(guò)來(lái)的,專門針對(duì)C/C++的單元測(cè)試工具。

  測(cè)試驅(qū)動(dòng)開發(fā)的原則:

  先寫測(cè)試代碼,然后編寫符合測(cè)試的代碼。至少做到完成部分代碼后,完成對(duì)應(yīng)的測(cè)試代碼;

  測(cè)試代碼不需要覆蓋所有的細(xì)節(jié),但應(yīng)該對(duì)所有主要的功能和可能出錯(cuò)的地方有相應(yīng)的測(cè)試用例;

  發(fā)現(xiàn) bug,首先編寫對(duì)應(yīng)的測(cè)試用例,然后進(jìn)行調(diào)試;

  不斷總結(jié)出現(xiàn) bug 的原因,對(duì)其他代碼編寫相應(yīng)測(cè)試用例;

  每次編寫完成代碼,運(yùn)行所有以前的測(cè)試用例,驗(yàn)證對(duì)以前代碼影響,把這種影響盡早消除;

  不斷維護(hù)測(cè)試代碼,保證代碼變動(dòng)后通過(guò)所有測(cè)試;

  在編碼前:他可以強(qiáng)迫你對(duì)需求進(jìn)行詳細(xì)的分析。

  在編碼時(shí):他可以使你對(duì)over coding保持警覺(jué)。

  在重構(gòu)時(shí):可以確保新的設(shè)計(jì)能夠兼容舊版本的功能。

  在團(tuán)隊(duì)開發(fā)時(shí):可以確保自己的單元是無(wú)誤的。

  二、CPPUNIT原理

  從CPPUNIT的概念:測(cè)試框架,我們可以獲知一點(diǎn)CPPUNIT原理的信息。下面我們就這個(gè)概念來(lái)進(jìn)一步說(shuō)明CPPUNIT的原理。CPPUNIT的測(cè)試對(duì)象可以是一個(gè)函數(shù),一個(gè)對(duì)象或是若干個(gè)對(duì)象集,在CPPUNIT中將測(cè)試對(duì)象定義為FIXTURE,確定了FIXUTRE之后CPPUNIT要做的步驟主要是:

  1.了解需求,從使用者的角度寫出測(cè)試代碼,組織好測(cè)試框架。包括對(duì)FIXTURE及相關(guān)的初始化,準(zhǔn)備好測(cè)試用例,明確每個(gè)測(cè)試用例的預(yù)期輸出結(jié)果(也就是期望值)。

  2.往測(cè)試代碼中加入被測(cè)對(duì)象,運(yùn)行測(cè)試代碼后檢查輸出結(jié)果。

  3.如果隨著FIXTURE的變動(dòng)需要增加或者是刪除測(cè)試用例,可以直接在測(cè)試代碼中增加或刪除,而其它測(cè)試用例可以繼續(xù)延用,作為回歸的測(cè)試用例。

  4.每一次測(cè)試CPPUNIT都是通過(guò)對(duì)比FIXTURE的返回值和期望值而得出該用例的執(zhí)行是否成功,如果二者不同,則返回FALSE。

  在CPPUNIT中Test Case(測(cè)試用例)是最小的單位,當(dāng)一個(gè)FIXTURE有多個(gè)Test Case時(shí),可以將這多個(gè)Test Case組成一個(gè)Test Suite,這個(gè)Test Suite是用來(lái)測(cè)試同一被測(cè)單元的一組Test Case。若需要同時(shí)測(cè)試多個(gè)對(duì)象,將所有測(cè)試用例一起執(zhí)行的時(shí)候,可以將若干個(gè)Test Suite組成一個(gè)Test Factor。如果在測(cè)試的過(guò)程中FIXTURE發(fā)生了改變,可以直接修改相關(guān)的Test Case,這就是CPPUNIT對(duì)測(cè)試用例的管理。

  三、CPPUNIT的安裝使用

  Cppunit 支持多平臺(tái),其實(shí)程序自身帶的文檔就已經(jīng)非常詳盡了,建議在使用前能把根目錄下的INSTALL,INSTALL-WIN32.TXT,INSTALL-UNIX 幾個(gè)文件先過(guò)一遍,更高級(jí)的引用可以到doc目錄下查找。

  1) 總體構(gòu)成

  CppUnit是開源的測(cè)試工具,可以在它的安裝包里直接看到它的源代碼。

  作為一個(gè)完整的CppUnit framework,雖然源碼所在的實(shí)際路徑可能不盡相關(guān),但從邏輯上講它們被劃為如下幾個(gè)部分: 

   core:CppUnit的核心部分 

   output:掌管結(jié)果輸出 

   helper:一些輔助類 

   extension:作為單元測(cè)試的延伸,對(duì)CppUnit core部分的擴(kuò)展(比如:常規(guī)測(cè)試,重復(fù)測(cè)試) 

   listener:監(jiān)視測(cè)試進(jìn)程和測(cè)試結(jié)果 

   textui:一個(gè)運(yùn)行單元測(cè)試的文本環(huán)境 

   portability:提供針對(duì)不同平臺(tái)的移植設(shè)置 

  上述所有的內(nèi)容均被置于CppUnit名字空間之內(nèi)。

  2)WINDOWS的安裝以及配置

  At the current time, the only supported WIN32 platform is Microsoft Visual C++. You must have VC++ 6.0 at least.

  Windows 編譯環(huán)境要求我們至少是vc++ 6.0

  Quick Steps to compile & run a sample using the GUI TestRunner:

  - Open examples/examples.dsw in VC++ (contains all the samples).

  VC7 will ask you if you want to convert, anwser 'yes to all'.

  - Make HostApp the Active project

  - Compile

  - For Visual Studio 6 only:

  - in VC++, Tools/Customize.../Add-ins and macro files/Browse...

  - select the file lib/TestRunnerDSPlugIn.dll and press ok to register

  the add-ins (double-click on failure = open file in VC++).

  - Run the project

  先編譯好cppunit帶的庫(kù),然后把庫(kù)的路徑加入到項(xiàng)目路徑中,然后才能在例子中調(diào)用這些庫(kù)。

  附錄2有一些cppunit自己帶的文件,以及編譯一些庫(kù)的介紹,我們?nèi)绻屑?xì)看看它的configure文件的話,會(huì)發(fā)現(xiàn)它支持多平臺(tái)也是在這里實(shí)現(xiàn)的,他會(huì)檢測(cè)你運(yùn)行的環(huán)境,然后相應(yīng)的選擇合適的工具。

  3) UNIX平臺(tái)

  在UNIX平臺(tái)下先從http://www.sourceforge.net 獲得安裝包,解壓后在CPPUNIT的目錄依次操作:

  ./configure      //生成Makefile文件

  ./make

  ./make install   //將生成的庫(kù)文件復(fù)制到/user/local/lib目錄下,如果沒(méi)有目錄的安裝權(quán)限,可以指定到自己的目錄下。

  將安裝包include/cppunit 目錄復(fù)制到/usr/include目錄下,里面是cppunit的頭文件。

  網(wǎng)上有很多資料都說(shuō)make install之后要在共享動(dòng)態(tài)庫(kù)配置文件中將lib文件的目錄加進(jìn)去,但如果編譯出來(lái)的是靜態(tài)庫(kù)文件,則可省略了。

  四、實(shí)例一

  以下以一個(gè)helloworld的實(shí)例講解CPPUNIT的使用,以下例子僅作參考,注釋部分表達(dá)得不很嚴(yán)謹(jǐn),僅作參考。

  #include "cppunit/Portability.h"

  #include "cppunit/TestAssert.h"

  #include "cppunit/extensions/TestFactoryRegistry.h"

  #include "cppunit/extensions/HelperMacros.h"

  #include "cppunit/TestResult.h"

  #include "cppunit/TestRunner.h"

  #include "cppunit/TestResultCollector.h"

  #include "cppunit/BriefTestProgressListener.h"

  class Test:public CPPUNIT_NS::TestCase    //定義測(cè)試用例

  {

  CPPUNIT_TEST_SUITE(Test);          //創(chuàng)建一個(gè)suite,并將Test添加到suite

  CPPUNIT_TEST(testHelloWorld);       //聲明一個(gè)測(cè)試用例testHelloWorld,如果需要增加測(cè)試用例也需要在這里聲明。

  CPPUNIT_TEST_SUITE_END();        //結(jié)束suite聲明

  public:

  void setUp(void)     //CPPUNIT提供的初始化方法,將需要初始化的變量等在這里定義賦值。類似于構(gòu)造函數(shù),在執(zhí)行testcase之前自動(dòng)調(diào)動(dòng)。

  本實(shí)例沒(méi)有需要初始化的變量。

  {

  }

  void tearDown(void)      //CPPUNIT提供的結(jié)束testcase執(zhí)行完之后自動(dòng)運(yùn)行的方法,如,需要清除的指針等。testcase執(zhí)行完后自動(dòng)調(diào)用,類似于虛構(gòu)函數(shù)。本例不需要作清除工作,也可以不定義

  {

  }

  protected:

  void testHelloWorld(void){                  //測(cè)試用例testHelloWorld,如果需要增加測(cè)試用例,可以繼續(xù)添加

  printf("Hello,World!\n");

  }

  };

  CPPUNIT_TEST_SUITE_REGISTRATION(Test);     //通過(guò)宏注冊(cè)Test到test suite

  int main()

  {

  CPPUNIT_NS::TestResult controller;           //保存測(cè)試結(jié)果

  CPPUNIT_NS::TestResultCollector result;    //收集測(cè)試用例的執(zhí)行結(jié)果,它能夠區(qū)分測(cè)試用例執(zhí)行結(jié)果是false或是出現(xiàn)了錯(cuò)誤。

  controller.addListener(&result);

  CPPUNIT_NS::BriefTestProgressListener progress;

  controller.addListener(&progress);

  CPPUNIT_NS::TestRunner runner;      // TestRunner用于執(zhí)行測(cè)試用例,它將待執(zhí)行的測(cè)試對(duì)象管理起來(lái),然后供用戶調(diào)用

  runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());

  runner.run(controller);

  return result.wasSuccessful()?0:-1;             //反回用例的執(zhí)行結(jié)果,如果成功返回0失敗返回-1

  }

說(shuō)明:

  1.如CPPUNIT_TEST_SUITE_REGISTRATION()是CPPUNIT本身帶有的宏,可以要下載cppunit-docs-1.10.2包,在這里可以查閱到函數(shù),宏及包含的頭文件。

  2.CppUnit 提供了多種驗(yàn)證成功失敗的方式:

  CPPUNIT_ASSERT(condition)                   // 確信condition為真

  CPPUNIT_ASSERT_MESSAGE(message, condition)

  // 當(dāng)condition為假時(shí)失敗,并打印message

  CPPUNIT_FAIL(message)                         // 當(dāng)前測(cè)試失敗

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
我對(duì)CPPUNIT的一些理解
用cpp做c++單元測(cè)試【譯】
CppUnit快速入門
測(cè)試系列之cserver測(cè)試全攻略
netbeans 中使用Junit
你以為算法很難很神秘?告訴你,錯(cuò)了,不信進(jìn)來(lái)看
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服