诸多C单元测试工具测评报告_第1页
诸多C单元测试工具测评报告_第2页
诸多C单元测试工具测评报告_第3页
诸多C单元测试工具测评报告_第4页
诸多C单元测试工具测评报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

诸多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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论