CUNIT简介

简介: CUNIT简介

1.四种模式输出


模式

平台

结果输出方式

使用的接口函数

Basic

所有

标准输出

#include "CUnit/Basic.h"

CU_basic_set_mode(CU_BRM_VERBOSE);

CU_basic_run_tests();

Automated

所有

xml文件

#include "CUnit/Automated.h"

CU_list_tests_to_file();

CU_automated_run_tests();

Console

所有

交互式控制台

#include "CUnit/Console.h"

CU_console_run_tests();

Curses

Linux/Unix

交互式curses窗口

#include "CUnit/CUCurses.h"

CU_curses_run_tests();


 

模式

介绍

Basic

最常用的,结果输出到标准输出(stdout

Automated

生成完XML文件之后,然后再将CUnit-List.dtdCUnit-List.xslCUnit-Run.dtdCUnit-Run.xsl(这几个文件在CUnit的源码包可以找到)和XML文件放到同一级目录,再用IE浏览器打开,就可以看到漂亮的界面了。

Console

比较灵活,可以选择只执行其中某一个测试用例。

Curses

Console类似,只不过是以Curses窗口的方式展示。


2.  断言(#include <CUnit/CUnit.h>


断言

含义

CU_ASSERT(int  expression)

CU_ASSERT_FATAL(int  expression)

CU_TEST(int  expression)

CU_TEST_FATAL(int  expression)

断言表达式为TRUE(非零)

CU_ASSERT_TRUE(value)

CU_ASSERT_TRUE_FATAL(value)

断言值为真(非零)

CU_ASSERT_FALSE(value)

CU_ASSERT_FALSE_FATAL(value)

断言值为假(零)

CU_ASSERT_EQUAL(actual, expected)

CU_ASSERT_EQUAL_FATAL(actual, expected)

断言实际值=期望值

CU_ASSERT_NOT_EQUAL(actual, expected))

CU_ASSERT_NOT_EQUAL_FATAL(actual, expected)

断言实际值!=期望值

CU_ASSERT_PTR_EQUAL(actual, expected)

CU_ASSERT_PTR_EQUAL_FATAL(actual, expected)

断言指针实际==期待

CU_ASSERT_PTR_NOT_EQUAL(actual, expected)

CU_ASSERT_PTR_NOT_EQUAL_FATAL(actual, expected)

断言指针实际!=期待

CU_ASSERT_PTR_NULL(value)

CU_ASSERT_PTR_NULL_FATAL(value)

指针值==NULL

CU_ASSERT_PTR_NOT_NULL(value)

CU_ASSERT_PTR_NOT_NULL_FATAL(value)

指针值!=NULL

CU_ASSERT_STRING_EQUAL(actual, expected)

CU_ASSERT_STRING_EQUAL_FATAL(actual, expected)

断言实际字符串与预期字符串相等

CU_ASSERT_STRING_NOT_EQUAL(actual, expected)

CU_ASSERT_STRING_NOT_EQUAL_FATAL(actual, expected)

断言实际字符串与预期字符串不等

CU_ASSERT_NSTRING_EQUAL(actual, expected, count)

CU_ASSERT_NSTRING_EQUAL_FATAL(actual, expected, count)

断言实际和预期的第一个计数字符相同

CU_ASSERT_NSTRING_NOT_EQUAL(actual, expected, count)

CU_ASSERT_NSTRING_NOT_EQUAL_FATAL(actual, expected, count)

断言实际和预期的第一个计数字符不同

CU_ASSERT_DOUBLE_EQUAL(actual, expected, granularity)

CU_ASSERT_DOUBLE_EQUAL_FATAL(actual, expected, granularity)

断言(实际-预期)<=(粒度)

 

此断言必须链接到数学库。

CU_ASSERT_DOUBLE_NOT_EQUAL(actual, expected, granularity)

CU_ASSERT_DOUBLE_NOT_EQUAL_FATAL(actual, expected, granularity)

断言(实际-预期)>(粒度)

 

此断言必须链接到数学库。

CU_PASS(message)

用指定的消息注册传递断言。不执行逻辑测试。

CU_FAIL(message)

CU_FAIL_FATAL(message)

用指定的消息注册失败的断言。不执行逻辑测试。


3 框架及语句分


image.png


语句

含义

void test_XXX(void)

testcase

int suite_init(void)

在所有testcase运行前执行

int suite_clean(void)

在所有testcase运行后执行

void suite_setup(void)

在每个testcase运行前执行

void suite_teardown(void)

在每个testcase运行后执行

CU_SuiteInfo suites[] = {

    {"suite  1", suite_init, suite_clean, suite_setup, suite_teardown, tests},

CU_SUITE_INFO_NULL

};

设置Suite信息

CU_TestInfo tests[] = {

    {"test 1",  test_process_1 },

    {"test 2",  test_process_2 },

    {"test 3",  test_process_3 },

       {"test 4",  test_process_4 },

    CU_TEST_INFO_NULL

};

设置Test信息

int main(int argc, char* argv[])

{

       CU_ErrorCode err;  /*错误信息*/

 

       /* 初始化 */

       printf("init\n");

       err = CU_initialize_registry();/*初始化*/

       if(err){

              printf("CU_initialize_registry:  %d\n", err);

              return err;

       }

 

       /* 添加 suitestests */

       printf("add  suites and tests\n");

       err = CU_register_suites(suites);

       if(err)

       {

              printf("CU_register_suites:  %d\n", err);

       }

       CU_pTestRegistry reg =  CU_get_registry();

       printf("CU_get_registry:  %d/%d/%u\n", reg->uiNumberOfSuites, reg->uiNumberOfTests,  (long)reg->pSuite);

 

       /*设置运行模式 */

       printf("run  auto\n");

       /**** 自动运行模式 *****************/

       CU_set_output_filename("TestProcess");

       CU_list_tests_to_file();

       CU_automated_run_tests();

       //************************************/

 

       printf("run  basic\n");

       /***** 普通运行模式*************/

       CU_basic_set_mode(CU_BRM_VERBOSE);

       CU_basic_run_tests();

       //************************************/

 

       /*****Console运行模式****************

       CU_console_run_tests();

       /************************************/             

      

       /* end */

       printf("end\n");

       CU_cleanup_registry();/*清除注册*/

       err = CU_get_error();

       if( err )

       {

              printf("error:  %d", err);

       }

       return err;

测试主函数


4 Automated下的测试报告输出


在使用Automated下会输出TestProcess-Listing.xmlTestProcess-Results.xml文档,把CUNIT项目中的CUnit-List.xslCUnit-Run.xslCUnit-List.dtdCUnit-Run.dtd文件(在%CUNIT_HOME%\Share\目录下)。然后用浏览器打开TestProcess-Listing.xmlTestProcess-Results.xml,如图所示。

image.png


image.png


具体代码见我前面发的“64位Windows 10下如何搭建CUNIT环境”

————————————————————


软件安全测试

https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486

接口自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486

DevOps 和Jenkins之DevOps

https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486

DevOps与Jenkins 2.0之Jenkins

https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486

Selenium自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486

性能测试第1季:性能测试基础知识

https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486

性能测试第2季:LoadRunner12使用

https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486

性能测试第3季:JMeter工具使用

https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486

性能测试第4季:监控与调优

https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486

Django入门

https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486

啄木鸟顾老师漫谈软件测试

https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486

目录
相关文章
|
小程序 前端开发 安全
小程序全栈开发中的跨域问题及其解决方案
【4月更文挑战第12天】本文探讨了小程序全栈开发中的跨域问题及其解决方案。跨域问题源于浏览器安全策略,主要体现在前后端分离、第三方服务集成和数据共享上。为解决此问题,开发者可采用CORS、JSONP、代理服务器、数据交换格式和域名策略等方法。实践中需注意安全性、兼容性和性能。通过掌握这些解决方案,开发者能更好地处理小程序的跨域问题,提升用户体验。
937 0
|
存储 计算机视觉 Python
BGR与RGB
BGR与RGB
3107 1
|
前端开发 数据可视化 API
顶级好用的 React 表单设计生成器,可拖拽生成表单
React 前端开发中,表单组件是排在前三的高频使用的组件,如何快速构建表单,节省力气,避免重复造轮子呢,选择一款适合自己的前端表单设计生成器就非常重要了。本文介绍 3 款顶级好用的 React 表单设计器,其中最后一款卡拉云,是新一代低代码开发工具,不仅能自动生成各类表单,还可以拖拽生成其他常见的前端组件,一行代码连接前后端数据,可快速接入数据库/api。它是表单设计器的超集,可直接生成属于你的后台管理工具,无敌好用。
3827 0
|
关系型数据库 数据库 PostgreSQL
使用 Docker 在 Windows、Mac 和 Linux 系统轻松部署 PostgreSQL 数据库
使用 Docker 在 Windows、Mac 和 Linux 系统轻松部署 PostgreSQL 数据库
854 1
|
机器学习/深度学习 人工智能 Ubuntu
|
测试技术
[googletest] --- 简易使用教程
[googletest] --- 简易使用教程
980 0
|
开发框架 前端开发 JavaScript
利用Aspose.Word对Word文件添加印章处理以及实现业务数据的替换处理
利用Aspose.Word对Word文件添加印章处理以及实现业务数据的替换处理
|
机器学习/深度学习 人工智能 自然语言处理
OpenCV与AI深度学习之常用AI名词解释学习
AGI:Artificial General Intelligence (通用人工智能):是指具备与人类同等或超越人类的智能,能够表现出正常人类所具有的所有智能行为。又被称为强人工智能。
1376 2
|
Linux 编译器 数据处理
探索Linux命令之nm:解析二进制文件的神器
`nm`命令是Linux下分析二进制文件的工具,显示符号表中的函数、变量等信息及它们的地址和类型。它帮助理解程序结构、调试和优化,支持不同符号类型、输出选项和过滤。常用参数如`-a`显示所有符号,`-t f`列出定义的函数。在实际应用中,可以结合其他工具如`objdump`、`readelf`进行更深入的分析,并注意备份原始文件。
|
安全 Java
比较java枚举成员使用equal还是==
比较java枚举成员使用equal还是==
404 0

热门文章

最新文章