版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(1)每个测试用例被包装在一个测试包(suite)中,(Assertion)来测试通用数据Test '11' . Test '1M'Test 'N1' . Test 'NM'CUnit的用法CUnit 下载地址:CUnit 在线文档帮助:关于CUnit,本文主要从介绍三方面的内容:1.C Un it的介绍。1.1介绍如何使用CU nit。CUnit是一个对C语言编写的程序进行单元测试的框架,在线文档说它作为一个静态链接库被链接到用户的测试代码中。它提供了一种简洁的框架来建立测试架构,并提供丰富的断言类型。除此之外,它还提供了许多不
2、同的结构来运行测试用例和报告测试结果。(1)C Un it的架构Test RegistrySuite '1'Suite 'N'提到这个框架,为后面如何使用CUnit提供了基础。先介绍这个框架,从底层往上介绍就两句话:每个测试包(suite)是在有效的测试注册单元(Test Registry)中注册的。(Test Registry),这个测试注册单元下面可以包含多个测试包(suite),每个测试包可以拥有多个测试用例。划分测试包(suite)的规则对于CUnit来说,它是单线程运行,所以每次只能有一个有效的测试注册单元5)使用合适的接口来运行测试用例。Run te
3、sts using an approp riate in terface, e.g. CU_c on sole_r un _tests(suite)。至于测试用例,可以自由约定,比如按照模块来划分,一个模块的测试用例集中到一个测试包中则用来测试模块内部的函数。测试用例函数通过提供的各类输入调用被测试的函数,返回执行结果,然后通过CUnit提供的断言来判断被测试的函数是否正确。(2)测试模式Non-i nteractiveF面是四种测试模式:1 Automated Out put to xml file2 BasicFlexible p rogram mingin terface Non-i n
4、teractive3 Con soleCon sole in terface (ansi C)In teractive4 CursesGrap hical in terface (Unix)In teractive第一种模式是将结果输出到 XML文档中,便于生成报告。第二种模式是每一次运行结束之后在sta ndardcon sole方式的,可以人机交互;前两种Unix中使用。out put中显示测试结果,不能保留测试结果数据。第三种模式是 模式是非交互式的。第四种只在(3)测试的基本流程1) 编写单元测试函数(有必要的话要写 suite的init/cleanup 函数)。Write funct
5、ions for tests (and suite ini t/clea nup if n ecessary).2) 调用函数 CUinitialize_registry()初始化测试注册单元 (Test Registry) 。 Initialize the test registry -CU_in itialize_registry()3) 调用函数 CU_add_suite()将测试包(suite)添加到测试注册单元 (Test Registry)中。Add suites to the test registry - CU_add_suite()4) 调用函数 CU_add_test()将
6、测试用例添加到测试包 (suite)中。Add tests to the suites - CU_add_test()6)调用函数 CU_cleanup_registry清除测试注册单元(Test Registry)。Cleanup the test registry -CU_clea nup _registry()1.2通过一个例子来说明使用方法。先说明文件的组织结构1. 被测试的模块:cal num 。(1)文件MainModule.c,定义了一个求和函数 (2)头文件 MainModule.h,声明了求和函数 cal_num 。2. 测试用例和测试包 (1)文件TestMainModul
7、e.c ,定义了测试用例。3. 单元测试运行入口 (1)文件 CUnitRunTest.c各个文件的内容如下:【1】MainModule.hcppview p lainc opy1.#ifndef MAIN MODULE H2.#define MAIN MODULE H3.#include <stdio.h>4.5./计算两个数之和.#endifint cal_num( int a, int b);7.【2】MainModule.ccpp view plaincopy1.#include "MainModule.h"3./计算两个数之和4.int
8、cal_num( int a, int b)6.int c;5.return 1;7.8.c = a + b;9.10.return c;11.【3】TestMainModule.ccpp view plaincopy1.#include <stdio.h>2.#include <assert.h>3.#include "CUnit-2.1-0/include/CUnit/console.h"4.#include "MainModule.h"5.6.intlnitSuite()7.8.return 0;9.10
9、.11.intEndSuite()12.13.return 0;14.15.16.intTest_ls_Equal( int a, int b, int real)17.18.int result;19.20.result = cal_num(a, b);21.if (result = real)22.23.return 1;24.25.return 0;26.27.28.intTest_ls_Not_Equal( int a, int b, int real)30.int result;32.result = cal_num(a, b);33.if (result != real)36.37
10、.return 0;38.39.40.void Test1()41.42.CU_ASSERT(Test_ls_Equal(3, 4, 7);43.44.45.void Test2()46.47.CU_ASSERT(Test_Is_Not_Equal(4, 5, 10);48.49.50./*0表示成功,1表示失败*/51.int AddTestMainModule()52.53.CU_p Suite pSuite = NULL;54.55./*56.* 1. CU_add_suite增加一个 Suite57.* 2. Suite名字:testSuite58.* 3. InitSuite End
11、Suite:分别是测试单元初始和释放函数,59.*/60.pSuite = CU_add_suite("testSuite",InitSuite, EndSuite);61.62./检测注册Suite情况63.if (NULL = pSuite)64.65./return 1;66.67.68./*69.* 1.注册当前Suite下的测试用例70.* 2. p Suite:用例指针71.* 3. "Test1":测试单元名称72.* 4. Test1:测试函数73.*/74.if ( NULL = CU_add_test(pSuite,"Tes
12、t1",Test1) II75.NULL = CU_add_test (p Suite,"Test2",Test2)76.77.return 1;78.79.80./*另外一种测试方式 */81./*如不需要则NULL传递82.CU_Testlnfo testcases = 3."Testi:", Testi,84."Test2:", Test2,85.CU TEST INFO NULL86.;87.88.89.CU_Suitelnfo suites = "Testing the functio
13、n cal_num:", InitSuite, EndSuite, testcases,90.CU SUITE INFO NULL91.;92.93.if(CUE_SUCCESS != CU_register_suites(suites)94.95.return 1;96.97.*/98./*/99.100.return 0;101.【4】CUnitRunTest.ccpp view plaincopy1.#include <stdio.h>2.#include <assert.h>3.#include "CUnit-2.1-0/include/CU
14、nit/console.h"5.4.extern int AddTestMainModule();6.7.intmain()8.9.10./CU_initialize_registry注册函数注册一个用例返回 CUE系列异常值11.if ( CUE_SUCCESS != CU_initialize_registry()12.13.return CU_get_error();14.16./CU_get_registry返回注册到用例指针17.assert(NULL != CU_get_registry();19./检测是否在执行20.assert(!CU_is_test_running
15、();22./调用测试模块完成测试用例23.if (0 != AddTestMainModuleO)24.25.26.CU_cleanup_registry();return CU_get_error();0./使用console控制交互界面的函数入口CU_console_run_tests();31.32./*使用自动产生XML文件的模式*6.CU_set_out put_filename("TestMax");CU_list_tests_to_file(); CU_automated_run_tests();*/37.38.39.
16、/调用完毕清除注册信息CU_cleanup_registry();40.41.return 0;42.2.在两种不同环境下使用 CUnit来上面的例子进行单元测试。2.1在 Windows XP 下,在 VC 6.0 集成CUnit来进行单元测试。(1)自己动手生成链接静态库CUnit.lib 。下载 CUnit-2.1-0-src.zip ,解压,在 CUnit-2.1-0/CUnit 目录下,用 VC 6.0 打开工程文件 CUnit.dsp,有个提示,说没有找到works pace文件,不会理会,直接确定。然后在当前打开的工程项目中,点击"FileView",编译”和
17、链接”在工程,将上面例子中的文件包含进来。展开文件树形结构,任意点击一个文件打开,然后在最上面的工具栏点击CUnit-2.1-0/CUnit目录下就生产 CUnit.lib。在 VC 6.0 新建一个名为"Test_CUit"的 Win 32 con sole appi ication下载CUnit-2.1-0-winlib.zip,解压,把解压的目录CUnit-2.1-0复制到当前的工程目录下。将 CUnit.lib 叶复制到当前的工程目录下,并在"Project"->"Settings."->"Link&qu
18、ot;->"Object/library modules"中内容的末尾增加 CUnit.lib,用空格和前面的静态库文件隔开,然后点击"OK"即可。在"Test_CUit"工程项目中,在最上面的工具栏点击编译”> 链接”-> 运行”就可以看到控制台界面。输入相应的操作符号进行对应的操作,不再详述。备注:在TestMainModule.c 的AddTestMainModule() 函数中注释掉的部分是第一种测试模式"AutomatedOut put to xml file",默认的模式是第三种控制台
19、模式。把控制台模式注释掉,而把第一种测试模式打开,则运行时会在当前目录下三个XML 文件:CUnit-Memory-Dump.xml,TestMax-Listing.xml ,TestMax-Results.xml 。将这三个文件复制到目录CUn it-2.1-0/share/CU nit下,然后用浏览器打开后两个XML文件,可以看到测试报告的结果。22在Linux下,利用CUnit来进行单元测试。1.编译CUnit,编译后,头文件目录在/root/local/include/CUnit 中,静态库文件在/root/local/lib/下。(1) 用 root 用户登录,下载 CUnit-2.
20、1-0-src.tar.gz 。(2) tar -zxvf CUn it-2.1-0-src.tar.gz(3) cd CUn it-2.1-0(4) ./co nfigure -p refix=$HOME/local(5) make(6) make in stall2.编写一个Makefile文件,放入到在源文件目录中,内容如下:cpp view plaincopy1.2.LIB=-L/root/local/libINC=-l/root/local/include4.5.6.gcc $A -o test $(INC) $(LIB) -lcunit -lcurses - clean:stati
21、c7.rm -rf test3.all: MainModule.c TestMainModule.c CUnitRunTest.c3.在源文件目录下执行 make命令即可。4.运行./test即可看见 con sole 命令界面。3.关于断言的使用CUnit单元测试框架跟CUnit提供了一系列的断言来测试逻辑条件,这些断言的成功或是失败的结果都由踪,并在单元测试结束后可以看到。每个断言测试一个逻辑条件。如果选择"XXX_FATAL"这些断言,意味"CUnit/CUnit.h"这个头文件中声明的。现在就从CUnit的文档说明中摘录它的断言声明。着断言失败后
22、单元测试用例不再继续执行,所以带"FATAL"的断言版本需要谨慎使用。断言被包含在CU_ASSERTt exp ressio n)CU_ASSERT_FATAL exp ressio n)CUTESfint exp ressio n)CU_TEST_FATALt exp ressio n)Assert that expression is TRUEfnon-zero)Assert that value is TRUE (non-zero)CU_ASSERT_TR(VEue)CU_ASSERT_TRUE_FATAUe)CU_ASSERT_FALSEue)CU_ASSERT_F
23、ALSE_FATALje)Assert that value is FALSE(zero)CU_ASSERT_EQUALual, exp ected)CU_ASSERT_EQUAL_FATALal, exp ected)Assert that actual = = expectedCU_ASSERT_NOT_EQUAiLal, exp ected)CU_ASSERT_NOT_EQUAL_FATAai, exp ected)Assert that actual != expectedCU_ASSERT_ PTREQUAUal, exp ected)CU_ASSERT_ PTR_EQUAL_FAT
24、AJai, exp ected)Assert that poin tersactual = = exp ectedCU_ASSERT_ PTR_NOT_EQUAai, exp ected)CU_ASSERT_ PTR_NOT_EQUAL_FAtUai, exp ected)Assert that pointersactual != expectedCU_ASSERT_ PTR_NUVaiue)CU_ASSERT_ PTR_NULL_FATAiLe)Assert that poin ter value = NULLCU_ASSERT_ PTR_NOT_NULJb)CU_ASSERT_ PTR_N
25、OT_NULL_FATAe)Assert that poi nter value != NULLCU_ASSERT_STRING_EQacAjal, exp ected)Assert that strings actual and expected areCU_ASSERT_STRING_EQUAL_FActALI, exp ected)equivale ntCU_ASSERT_STRING_NOT_EQctALl, exp ected)Assert thatCU_ASSERT_STRING_NOT_EQUALjaAtEALstrings actual and expected differe
26、xp ected)CU_ASSERT_NSTRING_EQaCAlal, exp ected,Assert that 1st count charscou nt)of actual and expected are the sameCU_ASSERT_NSTRING_EQUAL_FATAL,exp ected, count)CU_ASSERT_NSTRING_NOT_EQU)AL, exp ected,Assert that 1st count charscou nt)of actual and expected differCU_ASSERT_NSTRING_NOT_EQUAL_FATALe
27、xp ected, count)CU_ASSERT_DOUBLE_EQUAbl, exp ected,Assert that | actual - expected | <=granu larity)|granularity |CU_ASSERT_DOUBLE_EQUAL_FATAL,Math library must be lin ked in for thisexp ected, granu larity)asserti on.CU_ASSERT_DOUBLE_NOT_EQUuaL exp ected,Assert that | actual - expected | >gra
28、nu larity)|granularity |cu_assert_double_not_equal_faualMath library must be lin ked in for thisexp ected, granu larity)asserti on.CU_PASmessage)Register a p ass ing asserti on with thesp ecified message. No logical test isp erformed.CU_FAILmessage)Register a failed asserti on with theCU_FAIL_FATALnessage)sp ecified message. No logical test is
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年展期借款协议样本解析版
- 金坛劳动合同模板
- 生产经理合同模板
- 顺义宾馆装修合同模板
- 贴地砖劳动合同模板
- 买购房合同模板
- 自建房拆除合同模板
- 模特签约劳务合同模板
- 销售项目外包协议合同模板
- 基质采购合同模板
- 公安联考行测题库及答案
- 银行招聘-建设银行备考手册
- 医用高等数学智慧树知到答案2024年南方医科大学
- 大棚膜购销合同协议书
- 世界的地形(课件) 2024-2025学年七年级地理上册同步课堂(人教版2024)
- 甘肃省道德与法治初二上学期试题及答案解析
- 2024-2030年中国分布式温度传感系统行业市场发展趋势与前景展望战略分析报告
- 2023年中考英语备考让步状语从句练习题(附答案)
- (正式版)HG∕T 21633-2024 玻璃钢管和管件选用规定
- 《信息安全技术 网络安全产品互联互通框架》
- 辛弃疾词《青玉案·元夕》
评论
0/150
提交评论