• <menu id="w2i4a"></menu>
  • logo Visual Studio系列教程

    文檔首頁>>Visual Studio系列教程>>Visual Studio 使用教程:如何編寫C ++ DLL的單元測試(上)

    Visual Studio 使用教程:如何編寫C ++ DLL的單元測試(上)


    Visual Studio是功能完備的 IDE,可用于編碼、調(diào)試、測試和部署到任何平臺(tái),Visual Studio使用 .NET 開發(fā) iOS、Android 和 Web 應(yīng)用和游戲。

    點(diǎn)擊立即下載Visual Studio


    本演練介紹如何使用測試優(yōu)先方法開發(fā)本機(jī)C ++ DLL。(點(diǎn)擊此處到達(dá)下部分內(nèi)容)?;静襟E如下:

    • 創(chuàng)建一個(gè)本機(jī)測試項(xiàng)目。測試項(xiàng)目與DLL項(xiàng)目位于同一解決方案中。
    • 創(chuàng)建一個(gè)DLL項(xiàng)目。本演練將創(chuàng)建一個(gè)新的DLL,但是測試現(xiàn)有DLL的過程是相似的。
    • 使DLL函數(shù)對測試可見。
    • 迭代地?cái)U(kuò)充測試。建議一個(gè)“紅色-綠色-重構(gòu)”循環(huán),其中代碼的開發(fā)由測試主導(dǎo)。
    • 調(diào)試失敗的測試。您可以在調(diào)試模式下運(yùn)行測試。
    • 重構(gòu),同時(shí)保持測試不變。重構(gòu)意味著在不更改其外部行為的情況下改進(jìn)代碼的結(jié)構(gòu)。您可以這樣做以提高代碼的性能,可擴(kuò)展性或可讀性。因?yàn)槟康牟皇且男袨?,所以在對代碼進(jìn)行重構(gòu)更改時(shí),請勿更改測試。這些測試有助于確保重構(gòu)時(shí)不會(huì)引入錯(cuò)誤。
    • 檢查覆蓋范圍。當(dāng)單元測試使用更多的代碼時(shí),它們會(huì)更加有用。您可以發(fā)現(xiàn)測試已使用了代碼的哪些部分。
    • 將單元與外部資源隔離。通常,DLL依賴于您正在開發(fā)的系統(tǒng)的其他組件,例如其他DLL,數(shù)據(jù)庫或遠(yuǎn)程子系統(tǒng)。將每個(gè)單元與其依賴項(xiàng)隔離開來測試很有用。外部組件會(huì)使測試運(yùn)行緩慢,在開發(fā)過程中,其他組件可能不完整。

    創(chuàng)建一個(gè)本機(jī)單元測試項(xiàng)目

    • 在“文件”菜單上,選擇“新建”>“項(xiàng)目”。
    • Visual Studio 2017及更早版本:展開已安裝>模板> Visual C ++>測試。Visual Studio 2019:將語言設(shè)置為C ++,然后在搜索框中鍵入"測試''。
    • 選擇本機(jī)單元測試項(xiàng)目模板,或您喜歡的任何已安裝框架。如果您選擇其他模板(例如Google Test或Boost.Test),則基本原理相同,盡管某些細(xì)節(jié)有所不同。
    • 在本演練中,測試項(xiàng)目名為NativeRooterTest。
    • 在新項(xiàng)目中,檢查unittest1.cpp。

    Test project with TEST_CLASS and TEST_METHOD

    注意:

    • 通過使用TEST_METHOD(YourTestName){...}定義每個(gè)測試。
    • 您不必編寫常規(guī)的函數(shù)簽名,簽名是由宏TEST_METHOD創(chuàng)建的。宏生成一個(gè)實(shí)例函數(shù),該函數(shù)返回void。它還生成一個(gè)靜態(tài)函數(shù),該函數(shù)返回有關(guān)測試方法的信息。該信息使測試瀏覽器可以找到該方法。
    • 使用TEST_CLASS(YourClassName){...}將測試方法分組為類。
    • 運(yùn)行測試時(shí),將創(chuàng)建每個(gè)測試類的實(shí)例。測試方法的調(diào)用順序不確定。您可以定義在每個(gè)模塊,類或方法之前和之后調(diào)用的特殊方法。
    • 驗(yàn)證測試是否在“測試資源管理器”中運(yùn)行:
      • 插入一些測試代碼:
    TEST_METHOD(TestMethod1)
    {
        Assert::AreEqual(1,1);
    }

    請注意,Assert類提供了幾種靜態(tài)方法,可用于驗(yàn)證測試方法中的結(jié)果。

      • 在“測試”菜單上,選擇“運(yùn)行”>“所有測試”,測試生成并運(yùn)行,出現(xiàn)“測試資源管理器”,該測試將顯示在“通過的測試”下。

    Unit Test Explorer with one passed test

    創(chuàng)建一個(gè)DLL項(xiàng)目

    以下步驟顯示如何在Visual Studio 2019中創(chuàng)建DLL項(xiàng)目。

    • 使用Windows桌面向?qū)?chuàng)建C ++項(xiàng)目:在解決方案資源管理器中右鍵單擊解決方案名稱,然后選擇“添加”>“新建項(xiàng)目”。 將語言設(shè)置為C ++,然后在搜索框中鍵入“ windows”。 從結(jié)果列表中選擇Windows桌面向?qū)А?/span>
    • 在本演練中,該項(xiàng)目名為RootFinder。
    • 按創(chuàng)建。在下一個(gè)對話框的“應(yīng)用程序類型”下,選擇“動(dòng)態(tài)鏈接庫(dll)”,然后選中“導(dǎo)出符號(hào)”。
    • 導(dǎo)出符號(hào)選項(xiàng)會(huì)生成一個(gè)方便的宏,可用于聲明導(dǎo)出的方法。

    C++ project wizard set for DLL and Export Symbols

    • 在主體.h文件中聲明一個(gè)導(dǎo)出的函數(shù):

    New DLL code project and .h file with API macros

    聲明符__declspec(dllexport)使該類的公共成員和受保護(hù)成員在DLL外部可見

    • 在主體.cpp文件中,為該函數(shù)添加一個(gè)最小主體:
    // Find the square root of a number.
        double CRootFinder::SquareRoot(double v)
        {
            return 0.0;
        }

    將測試項(xiàng)目耦合到DLL項(xiàng)目

    • 將DLL項(xiàng)目添加到測試項(xiàng)目的項(xiàng)目引用中:
      • 在解決方案資源管理器中右鍵單擊測試項(xiàng)目節(jié)點(diǎn),然后選擇“添加”>“引用”。
      • 在“添加引用”對話框中,選擇DLL項(xiàng)目,然后選擇“添加”。

    C++ project properties | Add New Reference

    • 在主體單元測試.cpp文件中,包括DLL代碼的.h文件:
    #include "..\RootFinder\RootFinder.h"
    • 添加使用導(dǎo)出功能的基本測試:
    TEST_METHOD(BasicTest)
    {
       CRootFinder rooter;
       Assert::AreEqual(
          // Expected value:
          0.0,
          // Actual value:
          rooter.SquareRoot(0.0),
          // Tolerance:
          0.01,
         // Message:
         L"Basic test failed",
         // Line number - used if there is no PDB file:
         LINE_INFO());
    }
    • 構(gòu)建解決方案。
    • 新測試將出現(xiàn)在“測試資源管理器”中。
    • 在測試資源管理器中,選擇“全部運(yùn)行”。

    Unit Test Explorer - Basic Test passed

    您已經(jīng)設(shè)置了測試和代碼項(xiàng)目,并確認(rèn)可以運(yùn)行在代碼項(xiàng)目中運(yùn)行功能的測試。現(xiàn)在您可以開始編寫實(shí)際的測試和代碼。

    本文內(nèi)容較多,分為上下兩部分進(jìn)行介紹,(點(diǎn)擊此處到達(dá)下部分內(nèi)容)。


    想要購買Visual Studio正版授權(quán),或了解更多產(chǎn)品信息請點(diǎn)擊【咨詢在線客服】

    慧聚IT


    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();