日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使用CppUnit进行单元测试

發(fā)布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用CppUnit进行单元测试 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://www.vckbase.com/document/viewdoc/?id=1762

一、前言

  測試驅(qū)動開發(fā)(TDD)是以測試作為開發(fā)過程的中心,它堅持,在編寫實際代碼之前,先寫好基于產(chǎn)品代碼的測試代碼。開發(fā)過程的目標(biāo)就是首先使測試能夠通過,然后再優(yōu)化設(shè)計結(jié)構(gòu)。測試驅(qū)動開發(fā)式是極限編程的重要組成部分。XUnit,一個基于測試驅(qū)動開發(fā)的測試框架,它為我們在開發(fā)過程中使用測試驅(qū)動開發(fā)提供了一個方便的工具,使我們得以快速的進(jìn)行單元測試。XUnit的成員有很多,如JUnit,PythonUnit等。今天給大家介紹的CppUnit即是XUnit家族中的一員,它是一個專門面向C++的測試框架。

本文不對CppUnit源碼做詳細(xì)的介紹,而只是對CppUnit的應(yīng)用作一些介紹。你將看到:

  • CppUnit源代碼的各個組成部分;
  • 怎樣設(shè)置你的開發(fā)環(huán)境以能夠使用CppUnit;
  • 怎樣為你的產(chǎn)品代碼添加測試代碼(實際上應(yīng)該反過來,為測試代碼添加產(chǎn)品代碼。在TDD中,先有測試代碼后有產(chǎn)品代碼),并通過CppUnit來進(jìn)行測試;
  • 本文敘述背景為:CppUnit1.12.0, Visual C++ 6.0, WindowsXP。文中敘述有誤之處,敬請批評指正。

    一. CppUnit的安裝
    從http://sourceforge.net/projects/cppunit CppUnit的源碼包. CppUnit是開源產(chǎn)品 , 當(dāng)前最高版本為1.12.0. (在上面的鏈接所指向的頁面上選擇 Development Snapshot ).?
    下載后,將源碼包解壓縮到本地硬盤,例如解壓到E:/ cppunit-1.12.0。筆者把文件夾名稱中的版本號去掉,即源碼包解壓縮到E:/cppunit。下載解壓后,你將看到如下文件夾:

    ?

    主要的文件夾有:

    • doc: CppUnit的說明文檔。另外,代碼的根目錄,還有三個說明文檔,分別是INSTALL,INSTALL-unix,INSTALL-WIN32.txt;
    • examples: CpppUnit提供的例子,也是對CppUnit自身的測試,通過它可以學(xué)習(xí)如何使用CppUnit測試框架進(jìn)行開發(fā);
    • include: CppUnit頭文件;
    • src: CppUnit源代碼目錄;
    • config:配置文件;
    • contrib:contribution,其他人貢獻(xiàn)的外圍代碼;
    • lib:存放編譯好的庫;
    • src:源文件,以及編譯庫的project等;

      接下來進(jìn)行編譯工作。 在src/目錄下, 將CppUnitLibraries.dsw工程文件用vc 打開。執(zhí)行build/batch build,編譯成功的話,生成的庫文件將被拷貝到lib目錄下。中途或者會有些project編譯失敗,一般不用管它,我們重點看的是cppunit和TestRunner 這兩個project的debug和release版本。
      編譯通過以后, 在lib/目錄下,會生成若干lib,和dll文件, 都以cppunit開頭. cppunitd表示debug版, cppunit表示release版。
    CppUnit為我們提供了兩套框架庫,一個為靜態(tài)的lib,一個為動態(tài)的dll。cppunit project:靜態(tài)lib;cppunit_dll project:動態(tài)dll和lib。在開發(fā)中我們可以根據(jù)實際情況作出選擇。
    你也可以根據(jù)需要選擇所需的項目進(jìn)行編譯,其中項目cppunit為靜態(tài)庫,cppunit_dll為動態(tài)庫,生成的庫文件為:

    • cppunit.lib:靜態(tài)庫release版;
    • cppunitd.lib:靜態(tài)庫debug版;
    • cppunit_dll.lib:動態(tài)庫release版;
    • cppunitd_dll.lib:動態(tài)庫debug版;

      另外一個需要關(guān)注的project是TestRunner,它輸出一個dll,提供了一個基于GUI 方式的測試環(huán)境,在CppUnit下, 可以選擇控制臺方式和GUI方式兩種表現(xiàn)方案。兩種方案分別如下圖所示:

    ?

    我們選擇GUI方式,所以我們也需要編譯這個project,輸出位置亦為lib文件夾。
    要使用CppUnit,還得設(shè)置好頭文件和庫文件路徑,以VC6為例,選擇Tools/Options/Directories,在Include files和Library files中分別添加%CppUnitPath%/include和%CppUnitPath%/lib,其中%CppUnitPath%表示CppUnit所在路徑。本文這里分別填的是E:/CPPUNIT/INCLUDE和E:/CPPUNIT/LIB。

    二、概念

    在使用之前,我們有必要認(rèn)識一下CppUnit中的主要類,當(dāng)然你也可以先看后面的例子,遇到問題再回過頭來看這一節(jié)。
    CppUnit核心內(nèi)容主要包括一些關(guān)鍵類:

    Test:所有測試對象的基類。

    CppUnit采用樹形結(jié)構(gòu)來組織管理測試對象(類似于目錄樹,如下圖所示),因此這里采用了組合設(shè)計模式(Composite Pattern),Test的兩個直接子類TestLeaf和TestComposite分別表示“測試樹”中的葉節(jié)點和非葉節(jié)點,其中TestComposite主要起組織管理的作用,就像目錄樹中的文件夾,而TestLeaf才是最終具有執(zhí)行能力的測試對象,就像目錄樹中的文件。

    Test最重要的一個公共接口為:

    virtual void run(TestResult *result) = 0;

    其作用為執(zhí)行測試對象,將結(jié)果提交給result。
    在實際應(yīng)用中,我們一般不會直接使用Test、TestComposite以及TestLeaf,除非我們要重新定制某些機(jī)制。

    TestFixture:用于維護(hù)一組測試用例的上下文環(huán)境。

      在實際應(yīng)用中,我們經(jīng)常會開發(fā)一組測試用例來對某個類的接口加以測試,而這些測試用例很可能具有相同的初始化和清理代碼。為此,CppUnit引入TestFixture來實現(xiàn)這一機(jī)制。
    TestFixture具有以下兩個接口,分別用于處理測試環(huán)境的初始化與清理工作:

    virtual void setUp(); virtual void tearDown(); TestCase:測試用例,從名字上就可以看出來,它便是單元測試的執(zhí)行對象。

      TestCase從Test和TestFixture多繼承而來,通過把Test::run制定成模板函數(shù)(Template Method)而將兩個父類的操作融合在一起,run函數(shù)的偽定義如下:

    // 偽代碼 void TestCase::run(TestResult* result) {result->startTest(this); // 通知result測試開始if( result->protect(this, &TestCase::setUp) ) // 調(diào)用setUp,初始化環(huán)境result->protect(this, &TestCase::runTest); // 執(zhí)行runTest,即真正的測試代碼result->protect(this, &TestCase::tearDown); // 調(diào)用tearDown,清理環(huán)境result->endTest(this); // 通知result測試結(jié)束 }

    這里要提到的是函數(shù)runTest,它是TestCase定義的一個接口,原型如下:

    virtual void runTest();

    用戶需從TestCase派生出子類并實現(xiàn)runTest以開發(fā)自己所需的測試用例。
    另外還要提到的就是TestResult的protect方法,其作用是對執(zhí)行函數(shù)(實際上是函數(shù)對象)的錯誤信息(包括斷言和異常等)進(jìn)行捕獲,從而實現(xiàn)對測試結(jié)果的統(tǒng)計。

    TestSuit:測試包,按照樹形結(jié)構(gòu)管理測試用例

    TestSuit是TestComposite的一個實現(xiàn),它采用vector來管理子測試對象(Test),從而形成遞歸的樹形結(jié)構(gòu)。

    TestFactory:測試工廠

    這是一個輔助類,通過借助一系列宏定義讓測試用例的組織管理變得自動化。參見后面的例子。

    TestRunner:用于執(zhí)行測試用例

    TestRunner將待執(zhí)行的測試對象管理起來,然后供用戶調(diào)用。其接口為:

    virtual void addTest( Test *test ); virtual void run( TestResult &controller, const std::string &testPath = "" );

      這也是一個輔助類,需注意的是,通過addTest添加到TestRunner中的測試對象必須是通過new動態(tài)創(chuàng)建的,用戶不能刪除這個對象,因為TestRunner將自行管理測試對象的生命期。

    三、CppUnit 的使用

      以上工作完成以后,就可以正式使用CppUnit了,由于單元測試是TDD(測試驅(qū)動開發(fā))的利器,一般人會先寫測試代碼,然后再寫產(chǎn)品代碼,不過筆者認(rèn)為先寫產(chǎn)品代碼框架后再寫測試代碼,然后通過慢慢補(bǔ)充產(chǎn)品代碼以使得能通過測試的方法會好些。不管先寫誰只要寫得舒服安全就可以。本文決定先寫測試代碼。
      前面我們提到過,CppUnit最小的測試單位是TestCase,多個相關(guān)TestCase組成一個TestSuite。要添加測試代碼最簡單的方法就是利用CppUnit為我們提供的幾個宏來進(jìn)行(當(dāng)然還有其他的手工加入方法,但均是殊途同歸,大家可以查閱CppUnit頭文件中的演示代碼)。這幾個宏是:

    CPPUNIT_TEST_SUITE() 開始創(chuàng)建一個TestSuite; CPPUNIT_TEST() 添加TestCase; CPPUNIT_TEST_SUITE_END() 結(jié)束創(chuàng)建TestSuite; CPPUNIT_TEST_SUITE_NAMED_REGISTRATION() 添加一個TestSuite到一個指定的TestFactoryRegistry工廠。

    感興趣的朋友可以在HelperMacros.h看看這幾個宏的聲明,本文在此不做詳述。

    假定我們要實現(xiàn)一個類,類名暫且取做CPlus,它的功能主要是實現(xiàn)兩個數(shù)相加(多簡單的一個類啊,這也要測試嗎?不要緊,我們只是了解怎樣加入測試代碼來測試它就行了,所以越簡單越好)。 假定這個類要實現(xiàn)的相加的方法是:

    int Add(int nNum1, int nNum2);

      OK,那我們先來寫測試這個方法的代碼吧。TDD 可是先寫測試代碼,后寫產(chǎn)品代碼(CPlus)的哦!先寫的測試代碼往往是不能運(yùn)行或編譯的,我們的目標(biāo)是在寫好測試代碼后寫產(chǎn)品代碼,使之編譯通過,然后再進(jìn)行重構(gòu)。這就是Kent Beck說的“red/green/refactor”。所以,上面的類名和方法應(yīng)該還只是在你的心里,還只是你的idea而已。
      根據(jù)測試驅(qū)動的原理,我們需要先建立一個單元測試框架。我們在VC中為測試代碼建立一個project。通常,測試代碼和被測試對象(產(chǎn)品代碼)是處于不同的project中的。這樣就不會讓你的產(chǎn)品代碼被測試代碼所“污染 ”。
    由于在CppUnit下, 可以選擇控制臺方式和UI方式兩種表現(xiàn)方案,我們選擇UI方式。在本例中,我們將建立一個基于GUI 方式的測試環(huán)境。因此我們建立一個基于對話框的Project。假設(shè)名為UnitTest。
    建立了UnitTest project之后,我們首先配置這個工程。
    首先在project中打開RTTI開關(guān),具體位置在菜單Project/Settings/C++/C++ Language。如下圖所示設(shè)置:

      由于CppUnit所用的動態(tài)運(yùn)行期庫均為多線程動態(tài)庫,因此你的單元測試程序也得使用相應(yīng)設(shè)置,否則會發(fā)生沖突。于是我們在Project/Settings/C++/Code Generation中進(jìn)行如下設(shè)置:
      在Use run-time library一欄中,針對debug和release分別設(shè)置為‘Debug Multithreaded DLL’和‘Multithreaded DLL’。如下圖所示:

      最后別忘了在project中l(wèi)ink正確的lib。包括本例采用的cppunit.lib和cppunitd.lib靜態(tài)庫以及用于GUI方式的TestRunner.dll對應(yīng)的lib。具體位置在Project/Settings/Link/General
      在‘Object/library modules’中,針對debug和release分別加入cppunitd.lib testrunnerd.lib和cppunit.lib TestRunner.lib。如下圖所示:

      最后,由于TestRunner.dll為我們提供了基于GUI的測試環(huán)境。為了讓我們的測試程序能正確的調(diào)用它,TestRunner.dll必須位于你的測試程序的路徑下。所以把/lib目錄下的testrunnerd.dll和TestRunner.dll文件分別拷貝到UnitTest priject的程序debug和release版本輸出目錄中。如下圖所示:

    (這是release版本)只要放在一起就可以了。
    配置工作終于完成,下面開始寫測試框架。

    在CppUnit中, 是以TestCase為最小的測試單位, 若干TestCase組成一個TestSuite。所以我們要先建立一個TestCase。
    在UnitTest project中新建一個類, 命名為CPlusTestCase, 讓其從CppUnit::TestCase派生。為其新增一個方法,假設(shè)為 void testAdd(); 我們將在這個函數(shù)中寫入我們的一些測試代碼(還記得我們要測試的構(gòu)想中的CPlus::Add(…)嗎)。代碼如下:切記要包含頭文件

    #include <cppunit/TestCase.h> class CPlusTestCase : public CppUnit::TestCase { public:CPlusTestCase ();virtual ~ CPlusTestCase ();void testAdd(); };

    接下來, 我們要對我們的CPlusTestCase進(jìn)行聲明。聲明用到了三個宏.

    CPPUNIT_TEST_SUITE();CPPUNIT_TEST();CPPUNIT_TEST_SUITE_END();

    第一個宏聲明一個測試包(suite),第二個宏聲明(添加)一個測試用例. 現(xiàn)在我們的CPlusTestCase類看上去象這樣:切記要包含頭文件,否則無法識別這些宏。

    #include <cppunit/TestCase.h> #include <CppUnit/extensions/HelperMacros.h>class CPlusTestCase : public CppUnit::TestCase {CPPUNIT_TEST_SUITE(CPlusTestCase);CPPUNIT_TEST(testAdd);CPPUNIT_TEST_SUITE_END(); public:CPlusTestCase ();virtual ~ CPlusTestCase ();void testAdd(); };

    通過這幾個宏,我們就把CPlusTestCase和testAdd注冊到了測試列表當(dāng)中。

      接下來,我們要注冊我們的測試suite. 使用CPPUNIT_TEST_SUITE_NAMED_REGISTRATION()來注冊一個測試suite. 這個宏的第二個參數(shù)是我們注冊的suite的名字. 在這里我們可以用字符串來代替, 但我們用一個靜態(tài)函數(shù)來返回這個suite的名字.

    // PlusTestCase.h class CPlusTestCase : public CppUnit::TestCase {CPPUNIT_TEST_SUITE(CPlusTestCase);CPPUNIT_TEST(testAdd);CPPUNIT_TEST_SUITE_END(); public:CPlusTestCase ();virtual ~ CPlusTestCase ();void testAdd();static std::string GetSuiteName(); };// PlusTestCase.cppstd::string CPlusTestCase::GetSuiteName(){return " CPlus ";}

    記得要在PlusTestCase.h中包含 #include <string>?
    然后在 PlusTestCase.cpp注冊我們的suite.

    CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTestCase, CPlusTestCase::GetSuiteName());

    它將CPlusTestCase這個TestSuite注冊到一個指定的TestFactory工廠中。
    接下來我們寫一個注冊函數(shù)static CppUnit::Test* GetSuite(), 使其在運(yùn)行期生成一個Test.

    // PlusTestCase.h class CPlusTestCase : public CppUnit::TestCase {CPPUNIT_TEST_SUITE(CPlusTestCase);CPPUNIT_TEST(testAdd);CPPUNIT_TEST_SUITE_END(); public:CPlusTestCase ();virtual ~ CPlusTestCase ();void testAdd();static std::string GetSuiteName();static CppUnit::Test* GetSuite(); };// PlusTestCase.cppCppUnit::Test* CPlusTestCase::GetSuite(){CppUnit::TestFactoryRegistry& reg = CppUnit::TestFactoryRegistry::getRegistry (CPlusTestCase::GetSuiteName());return reg.makeTest();}

    記住在PlusTestCase.h中包含頭文件:

    #include <cppunit/extensions/TestFactoryRegistry.h>

    最后, 我們?yōu)閱卧獪y試建立一個UI測試界面.

      由于我們希望這個Project運(yùn)行后顯示的是GUI界面,所以我們需要在App的 InitInstance ()中屏蔽掉原有的對話框,代之以CppUnit的GUI。
    我們在CUnitTestApp::InitInstance()函數(shù)中,將原先顯示主對話框的代碼以下面的代碼取代:

    CppUnit::MfcUi::TestRunner runner;runner.addTest(CPlusTestCase::GetSuite());//添加測試runner.run();//show UI /* CUnitTestDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: Place code here to handle when the dialog is// dismissed with OK}else if (nResponse == IDCANCEL){// TODO: Place code here to handle when the dialog is// dismissed with Cancel} */

    切記必須先在UnitTest.cpp中包含頭文件:

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

    到此為止, 我們已經(jīng)建立好一個簡單的單元測試框架。測試框架雖然寫好了,但是測試代碼仍然為空,產(chǎn)品代碼也還沒有寫。下面我們來寫測試代碼:?
    如前所述,在測試類中,我們添加了一個測試方法:

    void testAdd();

    它測試的對象是前面提到的CPlus類的方法:int Add(int nNum1, int nNum2);(產(chǎn)品代碼)我們來看看testAdd()的實現(xiàn):記得在PlusTestCase.h中包含頭文件

    #include <cppunit/TestAssert.h> // PlusTestCase.cpp void CPlusTestCase::testAdd() {CPlus plus;int nResult = plus.Add(10, 20); //執(zhí)行Add操作CPPUNIT_ASSERT_EQUAL(30, nResult); //檢查結(jié)果是否等于30 }

    CPPUNIT_ASSERT_EQUAL是一個判斷結(jié)果的宏。CppUnit中類似的其它宏請查閱TestAssert.h,本文在此不做詳述 。

      另外,我們還可以覆寫基類的 setUp()、tearDown()兩個函數(shù)。這兩個函數(shù)實際上是一個模板方法,在測試運(yùn)行之前會調(diào)用setUp()以進(jìn)行一些初始化的工作,測試結(jié)束之后又會調(diào)用tearDown()來做一些“善后工作” ,比如資源的回收等等。當(dāng)然,你也可以不覆寫這兩個函數(shù),因為它們在基類里定義成了空方法,而不是純虛函數(shù)。?
      編寫完上面的測試代碼后,進(jìn)行編譯。編譯肯定通不過,編譯器會告訴我們CPlus類沒有聲明,因為我們還沒有實現(xiàn)CPlus類呢!現(xiàn)在的工作就是馬上實現(xiàn)CPlus類,讓編譯通過?,F(xiàn)在你應(yīng)該嗅到一點“測試驅(qū)動”(Test Driven Develop)的味道了吧?

    在VC中建立一個MFC Extension Dll的Project,在這個Project 中加入類CPlus,它的聲明如下:

    // Plus.h class AFX_EXT_CLASS CPlus { public:CPlus();virtual ~CPlus(); public:int Add(int nNum1, int nNum2); };

    Add在Plus.cpp中實現(xiàn)如下

    int CPlus::Add(int nNum1, int nNum2) {return nNum1 + nNum2;//這里可以寫一些錯誤的語句,用來看看錯誤的結(jié)果 }

    非常簡單,不是嗎?現(xiàn)在讓前面那個包含測試代碼的Project dependent這個Project,并且include 相關(guān)頭文件 ,Rebuild All,你會發(fā)現(xiàn)編譯已通過。你體會到了測試代碼驅(qū)動產(chǎn)品代碼了嗎?當(dāng)然我們的這個例子還很簡單 ,沒有重構(gòu)這一步驟。

    運(yùn)行我們的測試程序,單擊Browse,你就會看到如下圖所示的界面:


    選擇CPlusTestCase::testAdd后,單擊Run,你就會看到如下圖所示的界面:

      這下你應(yīng)該對前面我們說的TestSuite的名字理解更深了吧。CPlus是一個測試包TestSuite,它的下面包含一個測試用例,這個測試用例下面又包含一個測試方法。

    如果我修改CPlus::Add的代碼如下:

    int CPlus::Add(int nNum1, int nNum2) { // return nNum1 + nNum2;return 2; }

    重新編譯通過,運(yùn)行程序就會發(fā)現(xiàn):

    GUI顯示有一個單元測試不通過,并顯示出錯的地方和原因,這樣就很好的控制Bug了。


    四、下面是完整的程序清單

    // PlusTestCase.h #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <string> #include <cppunit/TestCase.h> #include <CppUnit/extensions/HelperMacros.h> #include <cppunit/extensions/TestFactoryRegistry.h> #include <cppunit/TestAssert.h> class CPlusTestCase : public CppUnit::TestCase {//通過這幾個宏,我們就把CPlusTestCase和testAdd注冊到了測試列表當(dāng)中.CPPUNIT_TEST_SUITE(CPlusTestCase); //聲明一個測試包CPPUNIT_TEST(testAdd); //聲明一個測試用例CPPUNIT_TEST_SUITE_END(); public:CPlusTestCase();virtual ~CPlusTestCase();void testAdd(); //測試方法static std::string GetSuiteName();//寫一個注冊函數(shù), 使其在運(yùn)行期生成一個Teststatic CppUnit::Test* GetSuite(); }; // PlusTestCase.cpp #include "stdafx.h" #include "UnitTest.h" #include "PlusTestCase.h" #include "plus.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif //注冊一個測試suite到一個指定的TestFactory工廠中 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTestCase, CPlusTestCase::GetSuiteName()); // // Construction/Destruction // CPlusTestCase::CPlusTestCase() { } CPlusTestCase::~CPlusTestCase() { } void CPlusTestCase::testAdd() {CPlus plus;int nResult = plus.Add(10, 20); //執(zhí)行Add操作CPPUNIT_ASSERT_EQUAL(30, nResult); //檢查結(jié)果是否等于30 } std::string CPlusTestCase::GetSuiteName() {return "CPlus"; } /** 注意:CPlusTestCase::GetSuite()返回一個指向CppUnit::Test的指針.* 這個指針就是整個測試的起點。* CppUnit::TestFactoryRegistry::getRegistry()根據(jù)TestSuite的名字返回TestFactoryRegistry工* 然后調(diào)用工廠里的makeTest()對TestSuite進(jìn)行組裝,將建立起一個樹狀的測試結(jié)構(gòu)。*/ CppUnit::Test* CPlusTestCase::GetSuite() {CppUnit::TestFactoryRegistry& reg = CppUnit::TestFactoryRegistry::getRegistry(CPlusTestCase::GetSuiteName());return reg.makeTest(); } // UnitTest.cpp #include "stdafx.h" #include "UnitTest.h" #include <cppunit/ui/mfc/TestRunner.h> #include "PlusTestCase.h" … / // CUnitTestApp initialization BOOL CUnitTestApp::InitInstance() {…CppUnit::MfcUi::TestRunner runner;runner.addTest(CPlusTestCase::GetSuite()); //添加測試 runner.addTest(CMinusTestCase::GetSuite());runner.run(); //show UI /* CUnitTestDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: Place code here to handle when the dialog is// dismissed with OK}else if (nResponse == IDCANCEL){// TODO: Place code here to handle when the dialog is// dismissed with Cancel} */return FALSE; }

    總結(jié)

    以上是生活随笔為你收集整理的如何使用CppUnit进行单元测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。