




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
諸多C單元測試工具測評報告概念簡介
黃碩2013624單元測試1bug,錯誤盤根錯節。理不出個頭緒出來。TestSuite2(測試套件)定義的一組測試用例,中間用precondition,postcondition相連。用來測試軟件一個方面的特性是否到達要求。TestFixture3(測試夾具〕一種掌握好的測試情境,掌握好的輸入輸出參數,掌握xUnitSetup 建立起TestFixture所需的測試環境,初始化一切該初始化的IO、參數、線程、內存、硬件等等Exercise進展實際的測試操作Verify驗證測試結果TearDownTestFixtureTestCase(測試用例)MockFunction 〔仿真函數)當使用一些庫函數的時,有寫狀況下無法調用一些尚未存在或者不便利調用的函數,那么就寫一些仿真函數來關心測試。Precondition〔前提條件〕一步測試的前提條件,例如內存、數據、指針、數據構造甚至是硬件的狀態。Postcondition〔后置條件〕一步測試的后置條件,如返回值、內存、數據、指針、數據構造甚至是硬件的狀態。用來供給應下一階段的測試或驗證。本測試報告的目的是對幾種單元測試的框架進展橫向比照簡介。如需學習測試框架請參考各個官網的教學文獻。1ockery簡介cmockery是一個相對來說功能、使用難度、學習難度很低的開源單元測試框架。opmock2,但是他沒有測試用例生成器。但是功能上更加強化了。之前的opmock2assertion的驗證,而cmockeryexception,內存泄露,實參與形參的匹配,mockfunction返回值的匹配。平臺cmockery支持Windows,Unix,Linux 和Mac,同時支持32位與64位操作系統。cmockery支持precondition和postcondition。即允許用戶撰寫setup和teardown方法。可以說測試的功能的掩蓋已經很全面了。供給了rpm和deb的安裝包,源代碼還有Windows上的Makefile。cmockery支持老的c編譯器,最的C11的編譯器功能很多沒有被收錄進去。cmockery只需要Link到CStandardLibrary 即可運行。支持的編譯器依據環境使用的編譯器為準。用法簡析運行的方法和opmock2類似,是把測試的方法注冊在一個類似于堆棧的構造里。例如:constUnitTesttests[]={unit_test(leak_memory_test),unit_test(buffer_overflow_test),unit_test(buffer_underflow_test),};returnrun_tests(tests);不同的是cmockery把每一輪運行的狀態保存了下來,用來支持postcondition和precondition的建立。具體的使用方法請參考4評價試用起來感覺比opmock2要好很多。到底他包含了更多的測試方法、宏使得可以更全面的測試代碼。另外cmockery是Googleopmock2全部cmockery并沒有全面修正。比方:沒有IDE整合沒有自動輸出保存結果總結cmockery有更大的潛力和進展空間,cmockery比起opmock2更適合我們的測試需求。但是假設要想運用的很好很輕松仍需自己撰寫插件。下載請見52.CTest簡介CTest其實是一個CMake內嵌的程序,用來供給測CMakebuild出來的軟件。平臺支持Windows,Unix,Mac,Linux32 位或64位用法簡析在運行CMakegeneratedbuildtree 的時候,開啟ENABLE_TEST和ADD_TEST宏,CTest將會自動運行測試并且記錄測試結果到XML文件。評價CTest是一個運行測試的機制,其并不具備單元測試的框架、方法、環境的集成。總結目前對于我們來說沒有實際用途。3.Check簡介Check是C單元測試中的大牌,諸多著名開源工程都在用Check6。例如GNUPDF,OpenSync,GStreamer等等。Check是完全免費并且開源的。Check嚴格支持xUnit并可以自己定義宏Check不光支持一般的assert,同時可以檢查內存泄露,pthread相關的以及LinuxKernelAPI 返回的一系列Signal。平臺在平臺上Check支持Linux/Unix居多,但是供給了源代碼。理論上可以在WindowsCheck本領承受C編寫。用法分析用戶需要#include<check.h>最簡潔的用例如下所示:START_TEST(test_name){/*unittestcode*/}END_TEST用戶需要自己編寫makefile來編譯測試用例,makefile的語法如下:TESTS=check_moneycheck_PROGRAMS=check_moneycheck_money_SOURCES=check_money.c$(top_builddir)/src/money.hcheck_money_CFLAGS=@CHECK_CFLAGS@check_money_LDADD=$(top_builddir)/src/libmoney.la@CHECK_LIBS@MakefileMakefile.inautoreconf--install,./configuremake用戶通過用戶通過suite_create來建立測試套件,并協調永利之間的關系:START_TEST(test_money_create){Money*m;m=money_create(5,“USD“);ck_assert_int_eq(money_amount(m),5);ck_assert_str_eq(money_currency(m),“USD“);money_free(m);}END_TESTSuite*money_suite(void){money_suite(void){Suite*s=suite_create(“Money“);/*Coretestcase*/TCase*tc_core=tcase_create(“Core“);tcase_add_test(tc_core,test_money_create);suite_add_tcase(s,tc_core);returns;}其中的tcase_add_testsuite_add_tcase函數是把測試用例整合到測試套件里。Check與眾不同的一點是支持輸出更具體的結果報告。需要調用SRunner函數。輸出的報告范例如下:Runningsuite(s):Money0%:Checks:1,Failures:1,Errors:0check_money.c:9:F:Core:test_money_create:0:Assertion”money_amount(m)==5”failed:money_amount(m)==0,5==5FAIL:check_money===============================================1of1testfailedPleasereporttocheck-develAT===============================================評價Check的功能很強大,有一系列的assert可以比大小。但是Check沒有自動生成測試用例、頭文件的機制。沒有IDE的整合,沒有自動測試檢測。需要手動注冊測試用例。總結Checkopmock2cmockeryAceUnit不差。而且是開源,完全可以依據自己的需求修改宏的定義和檢測機制。4.AceUnit簡介AceUnit是一個基于Java的免費C單元測試框架。AceUnit不是開源的,但是免費。AceUnit2013615平臺AceUnit是基于JavaSE6.0,AceUnitAceUnit的開發者稱會在將來推出用C7C89C99用法分析AceUnit完全仿照JUnit來實現C語言的單元測試。JUnit是Java通用的單元測試標準。被幾乎全部開發Java的大型企業應用,OraclePayPalebay、AmazonAceUnit可以自動化生成測試用例的頭文件方法。例如測試的文件叫做Test.c。當Test.h#includeTest.h”放入“Test.c”內之后執行java-jarAceUnit.jarTest>Test.h這樣省去了自己寫頭文件的時間。實際上用起AceUnit感覺AceUnit其實和Check差不多。實際的范例語法如下所示:A_TestvoidtestCompareInt{intn1;intn2;n1=0;n2=0;assertEquals(“Comparingtwoequalnumbersmustreturn0.“,0,compareInt(&0,&1));n1=1;n2=2;assertTrue(“Comparing1with2mustreturnavalue<0.“,compareInt(&n1,&n2)<0);n1=2;n2=1;assertTrue(“Comparing2with1mustreturnavalue>0.“,compareInt(&n1,&n2)>0);}返回值type用途A_Test測試一般用例專用A_Before返回值type用途A_Test測試一般用例專用A_Before測試Precondition,每個用例一次A_After測試Postcondition,每個用例一次A_BeforeClass測試Precondition,全部用例只有一次A_AfterClass測試Postcondition,全部用例只有一次A_Ignore被無視的用例,AceUnit不會執行1除了在正常的PC下進展測試,AceUnit的執行不需要像check,opmock2和cmockerymain函數里。AceUnit評價AceUnit自動生成頭文件有一套很嚴格的語法用來寫單元測試類似于JUnitTestSuite,TestFixture,Testcases,Setup和TearDown不需要手動注冊測試用例,AceUnit會自動檢測全部的方法自動執行。支持嵌入式測試缺點有:沒有很好的和IDE整合嵌入式測試有些狀況下會出錯沒有輸出xml的功能Java撰寫而不是CC++不開源不支持自定義宏總結AceUnit相比opmock2,check,cmockery 更專業,更嚴格。相對來說更適合我們的需求。5.opmock2簡介opmock是一個開源的C/C++單元測試的框架。該框架主要分為兩大版本。opmock1和opmock2。本片主要測試opmock2。特性opmock2的功能主要有如下四個:單元測試框架代碼的自動生成供給很多宏用來驗證各個類型結果的正確性自動運行測試代碼可以和其他單元測試框架結合使用單元測試框架代碼的自動生成opmock2承受承受一個shellscript,refresh_tests.sh 來自動生成測試文件和方法。用戶輸入需要測試的文件〔頭文件和代碼〕作為運行此腳本的實參,該腳本自動檢測輸入文件的后綴以及掃描文件,并依據結果自動生成所需的.c和.h文件用來編寫測試用例。供給很多宏用來驗證各個類型結果的正確性opmock2總共供給了15組宏用來驗證中間運行結果。涵蓋了char,unsignedchar,byte,unsignedbyte,short,unsignedshort,int,unsignedint,long,unsignedlong,float,cstring,bool,buffer 以及虛擬lib每一組包含了equal和notequal兩種推斷。我認為其中的,file和buffer格外適合驗證圖像相關的代碼。可以一次直接檢測整個buffer的正確性。也可以驗證ti庫中函數返回結果的正確性。可以和其他單元測試框架結合使用可以整合CppUnit和GoogleC++TestFramework 進展大型C++軟件的測試。另外,opmock的代碼格外簡潔,并且是公開的。所以可以依據自己的需求進展修改。平臺opmock1承受Java編寫,可以運行于任何可以運行JavaSE6.0以上的平臺。opmock2則承受C++編寫,需要使用LLVMClang編譯器與解釋器編譯。可以在Linux,Unix和Mac32位與64位兩種操作系統上nativecode的測試。opmock1現已停頓更,所以本篇評測只要針對的是opmock2。用法分析測試的方法如下。首先行型opmock2自帶的腳本生成必要的測試方法。當寫測試用例的時候就像寫任何C的代碼,直接編寫測試用例的規律即可。然后把它們注冊在測試用例名目下的main函數里。比方說我們要測試運行方法test_rgb2gray,則寫opmock_register_test(test_rgb2gray,“test_rgb2gray“);當注冊完全部的測試用例方法之后運行opmock_test_suite_run;下面是測試用例的返利代碼和測試結果:1:#include“fizzbuzz.h“#include<string.h>#include<stdlib.h>#include<stdio.h>char*fizzbuzz(inti){char*result=(char*)calloc(1,20);if(!(i%3))strcpy(result,“FIZZ“);if(!(i%5))strcat(result,“BUZZ“);if(!strlen(result))sprintf(result,“%d“,i);returnresult;}Main:#include“opmock.h“#include“fizzbuzz_test.h“intmain(intargc,char*argv[]){opmock_test_suite_reset;opmock_register_test(test_fizzbuzz_with_3,“test_fizzbuzz_with_3“);opmock_register_test(test_fizzbuzz_with_5,“test_fizzbuzz_with_5“);opmock_register_test(test_fizzbuzz_with_15,“test_fizzbuzz_with_15“);opmock_register_test(test_fizzbuzz_many_3,“test_fizzbuzz_many_3“);opmock_register_test(test_fizzbuzz_many_5,“test_fizzbuzz_many_5“);opmock_register_test(test_fizzbuzz_many_3_and_5,“test_fizzbuzz_many_3_and_5“);opmock_test_suite_run;return0;}最終輸出結果:OKtest”test_fizzbuzz_with_3”OKtest”test_fizzbuzz_with_5”OKtest”test_fizzbuzz_with_15”OKtest”test_fizzbuzz_many_3”OKtest”test_fizzbuzz_many_5”OKtest”test_fizzbuzz_many_3_and_5”OPMOCK:6testsrun,0testsfailed.當需要模擬輸入一些參數,甚至lib時可以自定模擬的lib和輸入實參的結果并運用opmock2lib#ifndefSOUND_H_#defineSOUND_H_intdo_sound(char*sound);#endif修改后的代碼:#include“fizzbuzz.h“#include“sound.h“#include<string.h>#include<stdlib.h>#include<stdio.h>char*fizzbuzz(inti){char*result=calloc(1,20);if(!(i%3))strcpy(result,“FIZZ“);if(!(i%5))strcat(result,“BUZZ“);if(!strlen(result))sprintf(result,“%d“,i);intres=do_sound(result);if(res!=0){sprintf(result,“ERROR“);}returnresult;}加載模擬lib的命令行:>opmock2-isound.h-o.-I/usr/include-I/usr/include/x86_64-linux-gnu-I/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixedopmock2也支持測試用例中的函數回調。回調函數必需定義成為指向函數的指針并入下模板所示:typedefint(*OPMOCK_do_sound_CALLBACK)(char* sound,intcalls);當完成了全部測試用例的編寫,需要寫出makefile 如下面的模板:CPPFLAGS=-O0 -ggdbOBJECTS=fizzbuzz.ofizzbuzz_test.omain.oopmock.o3all:fizzbuzzTest./fizzbuzz_test6fizzbuzz.o:fizzbuzz.hfizzbuzz_test.o:fizzbuzz.hopmock.o:opmock.h1011fizzbuzzTest:$(OBJECTS)fizzbuzz.h12 gcc-ofizzbuzz_test$(OBJECTS)1314clean:15-rm-f$(OBJECTS)16-rm-ffizzbuzz_test評價opmock2簡潔,學習曲線短。不到一小時就能會用開源,可以自己隨便修改可擴展功能,和其他測試框架共同使用缺點是:沒有和任何IDE整合需要自己寫Makefile沒有precondition和postcondition總結opmock2本身很簡潔,有一些最根本的單元測試功能。有點太簡潔。假設需要和IDE使用。6.TPT簡介TPT是一個專業級的付費測試軟件。由德國公司PIKETEC開發。不同于維基百科的描述,TPT并不是一個實打實的測試C代碼的單元測試軟件。但是確實一款針對安全性的嵌入式掌握系統綜合測試軟件。他符合ISO26262標準。平臺目前只看到了WindowsEclipse,就像是CCS。用法分析此款軟件結合了測試建模,測試執行和測試評估三個步驟。其中測試建模局部由專業的圖形軟件來繪制測試流程,并可以整合MatlabSimulink,ASCET 和AUTOSAR軟件的測試模型。在執行過程中可以掌握全部條件并對每一步輸出做出反響。驗證步驟則可以輸出圖標式的高級測試報告。評價這款軟件適合綜合測試多個嵌入式模塊之間的理論模型,而不是針對代碼的License$1000總結不適合用于單元測試。7.ParaSoftC/C++DevelopmentTest簡介假設資金不是限制,ParaSoft目前還沒有收到該公司的回復。現已申請了Windows和LinuxParasoft是功能最完善的單元測試框架。他集成了代碼分析,CodeReview,單RunTime的錯誤檢查。平臺操作系統上它支持WindowsLinuxSolarisUltraSPARCIDE它支持(有CCS):ARMADSGreenHillsMULTIIAREmbeddedWorkbenchKeilμVisionIDEKeilRealViewMicrosofteMbeddedVisualC++MicrosoftVisualStudioTexasInstrumentsCodeComposerWindRiverTornado編譯器支持:AlteraNIOSGCCADS(ARMDevelopmentSuite)ARMforKeiluVisionARMRVCTARMDS-5GNUCompilationToolsCosmicSoftware68HC08eCosCentricGCCFreescaleCodeWarriorC/C++forHC12FujitsuFRFamilySOFTUNEGCC(GNUCompilerCollection)GreenHillsMULTIforV800IARC/C++forARMIARC/C++forMSP430KeilC51MicrosoftVisualC++forWindowsMobileMicrosoftEmbeddedVisualC++QCC(QNXGCC)RenesasSHSERIESC/C++STMicroelectronicsST20STMicroelectronicsST40TASKING80C196CTASKINGTriCoreVX-toolsetC/C++TITMS320C2x/C2xx/C5xTITMS320C2000C/C++TITMS320C54xC/C++TITMS320C55xC/C++TITMS320C6xC/C++TIMSP430C/C++WindRiverGCCWindRiverDIABBuild系統支持:GNUmakeSunmakeMicrosoftnmake源掌握支持:AccuRevSCMBorlandStarTeamCVSGitIBMRationalClearCaseIBMRationalSynergyMicrosoftTeamFoundationServerMicrosoftVisualSourceSafePerforceSCMSerenaDimensionsSubversion(SVN)真可謂是太全了,CCS,TI的編譯器都在內。用法分析尚未拿到測試用的軟件,但是它支持直接在CCS里分析、調試、運行、報告測試用例。支持CCS內的團隊合作,CodeReview,代碼分析。在不用運行代碼的狀況下HTML,PDF等等。它還包括了一個Server版,可以直接做Server使用。他可以自動檢測代碼里的特性并且自動生成測試的代碼。固然這個功能還有待檢查。評價
1并且有不錯的嵌入式開發配套。具體的使用感受還需要實際使用過后才知道。總結這個軟件很心儀。Lint簡介Lint不是一個單元測試工具,但是卻是一個很好的代
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 會計提崗考試題及答案
- 山西省大同市渾源縣第七中學校2023-2024學年高一下學期期末考試 數學試題(含解析)
- 催奶師考試試題及答案
- 員工趣味考試題及答案解析
- java多態實現原理面試題及答案
- 泵站運營考試題及答案
- 工程管理試題及答案
- 自我評測工具2025年信息系統項目管理師試題及答案
- 西方社會運動影響試題及答案
- 西方政治制度與社會基本權利的關系試題及答案
- 社區居民積分制管理實施方案
- 高中生物教材易錯易混概念辨析(新人教版2019)
- 《創新創意設計》課件
- 初高中物理銜接講座(初高中物理對比)
- 寵物酒店商業計劃書創新創業計劃書2024年
- 2024年徐州市小學六年級畢業抽測語文模擬試卷
- 《電力建設安全工作規程 第2部分:電力線路》
- 模板工程風險辨識及防范措施
- 房建工程監理大綱范本(內容全面)
- 300立方米柴油儲罐設計
- 2024年湖北新華書店有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論