CUnit-Automated模式实例

2023-10-24 09:30
文章标签 模式 实例 automated cunit

本文主要是介绍CUnit-Automated模式实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.简介

Automated模式非交互式的。客户端启动测试运行,并将结果输出到XML文件。还可以将已注册测试和套件的列表也输出在XML中。可以调用函数CU_set_output_filename设置输出XML文件的文件名。调用函数CU_list_tests_to_file可以将测试Suite和Test也输出个另一个XML文件中。

2.测试报告

执行测试,执行成功后,会在当前目录下产生两个xml文件。

  • VO_UNITTEST-Listing.xml :对测试用例的报告
  • VO_UNITTEST-Results.xml :对测试结果的报告

要查看这两个文件,还需要使用如下xsl和dtd文件:

  • CUnit-List.dtd 和 CUnit-List.xsl用于解析列表文件。
  • CUnit-Run.dtd 和 CUnit-Run.xsl用于解析结果文件。

这四个文件在CUnit包里面有提供,安装之后在trunk/Share目录下。在查看结果之前,需要把这六个文件:
VO_UNITTEST-Listing.xml, VO_UNITTEST-Results.xml, CUnit-List.dtd, CUnit-List.xsl, CUnit-Run.dtd, CUnit-Run.xsl 拷贝到一个目录下,然后用浏览器打开两个结果的xml文件就可以了。如下图所示:
在这里插入图片描述
在这里插入图片描述

3.源码

最后附上上面运行测试的源码,VO_UnitTest_RegisterCommands实现代码跟上一篇Console模式的基本项目这里就不贴出来了。

void VO_UnitTest_EntryAutomated(void)
{CU_ErrorCode cu_err=CUE_SUCCESS;mVUT_FCT_ENTER();cu_err = CU_initialize_registry();if (cu_err!=CUE_SUCCESS){mVUT_TRACE((kVUT_NIV_CRITICAL,"CU_initialize_registry failed=%d.\n",cu_err));mVUT_RETURN;}cu_err = VO_UnitTest_RegisterCommands();if (cu_err!=CUE_SUCCESS){mVUT_TRACE((kVUT_NIV_CRITICAL,"VO_UnitTest_RegisterCommands failed=%d.\n",cu_err));CU_cleanup_registry();mVUT_RETURN;}/* Run all tests using the automated interface */CU_set_output_filename("VO_UNITTEST");CU_automated_run_tests();CU_list_tests_to_file();mVUT_TRACE((kVUT_NIV_INFO,"Test end, CU_cleanup_registry call\n"));CU_cleanup_registry();mVUT_RETURN;
}

4.内存信息

另外说一下,CUnit在最后测试结束调用CU_cleanup_registry时还会生成一个内存信息XML文件:CUnit-Memory-Dump.xml


CUnit - A Unit testing framework for C. 
http://cunit.sourceforge.net/ 
CUnit Memory Debugger Report 
Memory Allocation/Deallocation Records --------------------------------------------------------------------------------Pointer  Alloc File   Line Dealloc File Line Data Size 
0xcc9a50  TestDB.c     787  TestDB.c     716  24  
0xcc9a88  TestDB.c     792  TestDB.c     825  14  
0xcc9ab8  TestDB.c     787  TestDB.c     716  24  
0xcc9af0  TestDB.c     792  TestDB.c     825  14  
0xcc9b20  TestDB.c     665  TestDB.c     639  48  
0xcc9b70  TestDB.c     670  TestDB.c     720  9  
0xcc9b98  TestDB.c     787  TestDB.c     716  24  
0xccc908  TestDB.c     792  TestDB.c     825  15  
0xcccb50  TestDB.c     787  TestDB.c     716  24  
0xcccda0  TestDB.c     792  TestDB.c     825  16  
0xcccfe8  TestDB.c     787  TestDB.c     716  24  
0xccd238  TestDB.c     792  TestDB.c     825  16  
0xccd480  TestDB.c     787  TestDB.c     716  24  
0xccd6d0  TestDB.c     792  TestDB.c     825  16  
0xccd918  TestDB.c     665  TestDB.c     639  48  
0xcc9bb8  TestDB.c     670  TestDB.c     720  8  
0xccddb0  TestDB.c     787  TestDB.c     716  24  
0xcce000  TestDB.c     792  TestDB.c     825  14  
0xcce3b8  Automated.c  280  Automated.c  303  8  
0xcce3b8  Automated.c  280  Automated.c  303  9  
0xcce3b8  Automated.c  280  Automated.c  303  8  
0xcce810  TestRun.c    708  TestRun.c    826  32  
0xccea68  TestRun.c    717  TestRun.c    822  82  
0xccecf0  TestRun.c    726  TestRun.c    818  25  
0xccef40  TestRun.c    708  TestRun.c    826  32  
0xccf198  TestRun.c    717  TestRun.c    822  82  
0xccf420  TestRun.c    726  TestRun.c    818  28  
0xccf670  Automated.c  370  Automated.c  368  25  
0xccf670  Automated.c  370  Automated.c  426  28  
0xccfad8  TestRun.c    708  TestRun.c    826  32  
0xccfd30  TestRun.c    717  TestRun.c    822  82  
0xccffa0  TestRun.c    726  TestRun.c    818  26  
0xcd01f0  TestRun.c    708  TestRun.c    826  32  
0xcd0448  TestRun.c    717  TestRun.c    822  82  
0xcd06d0  TestRun.c    726  TestRun.c    818  26  
0xcd0920  TestRun.c    708  TestRun.c    826  32  
0xcd0b78  TestRun.c    717  TestRun.c    822  82  
0xcd0e00  TestRun.c    726  TestRun.c    818  29  
0xcd1058  TestRun.c    708  TestRun.c    826  32  
0xcd12b0  TestRun.c    717  TestRun.c    822  82  
0xcd1538  TestRun.c    726  TestRun.c    818  29  
0xcd1790  Automated.c  370  Automated.c  368  26  
0xcd19e0  Automated.c  370  Automated.c  426  29Cumulative Summary for Memory Debugger Dumper Run  
Valid Records  											46  
Invalid Records  										0  
Total Number of Allocation/Deallocation Records  		46  

这篇关于CUnit-Automated模式实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/274255

相关文章

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法