完整教程:测试自动化教程:Parasoft如何流重定向与单元测试自动化

news/2025/9/27 9:45:15/文章来源:https://www.cnblogs.com/ljbguanli/p/19114766

完整教程:测试自动化教程:Parasoft如何流重定向与单元测试自动化

在单元测试中,一个常见的挑战是如何对依赖于标准输入、输出和错误流的函数进行有效测试。例如,一个函数可能通过printf向控制台打印信息,或通过scanf从用户获取输入。在自动化测试环境中,我们无法进行人工交互,因此需要一种方法来模拟这些输入并捕获输出,以便进行验证。

Parasoft C/C++test提供了强大的流重定向API,专门用于解决这一难题。这些API允许测试用例在运行时动态地重定向标准流,将预设的字符串作为“模拟输入”提供给stdin,并捕获写入stdout或stderr的“实际输出”。这样,测试人员就可以像与程序交互一样,全面、自动化地验证那些涉及控制台输入输出的函数行为。

C/C++test提供的流API

定义
CppTest_StreamRedirect CppTest_RedirectStdInput(const char value);将当前测试用例的 stdin 流的值设置为提供的字符串的值。
CppTest_StreamRedirect CppTest_RedirectNStdInput(const char value, unsigned int size)将当前测试用例的 stdin 流的值设置为所提供字符串的第一个 'size' 字符的值。
CppTest_StreamRedirect* CppTest_RedirectStdOutput()重定向当前执行的测试用例的 stdout 流。返回的 CppTest_StreamRedirect 对象可用于验证测试用例后置条件部分中的流内容。在当前测试用例执行结束时自动恢复标准输出流的先前值。
CppTest_StreamRedirect* CppTest_RedirectStdError()为当前执行的测试用例重定向 stderr 流。返回的 CppTest_StreamRedirect 对象可用于验证测试用例后置条件部分中的流内容。在当前测试用例执行结束时自动恢复 stderr 流的先前值。
CppTest_StreamCompare(CppTest_StreamRedirect redirect, const char value)用于验证重定向的 stdout/stderr 流的内容。如果“值”与流值匹配,则返回 0;如果“值”小于流值,则返回小于零的整数;如果“值”大于流值,则返回大于零的整数。
CppTest_StreamNCompare(CppTest_StreamRedirect redirect, const char value, unsigned int size)用于验证重定向的 stdout/stderr 流的内容。如果“值”与流值匹配,则返回 0;如果“值”小于流值,则返回小于零的整数;如果“值”大于流值,则返回大于零的整数。仅比较流的第一个 'size’字符。
int CppTest_StreamSearch(CppTest_StreamRedirect, redirect, const char* pattern)用于验证重定向的 stdout/stderr 流的内容。在重定向流中搜索给定模式。返回在流中找到的模式的索引,如果未找到模式,则返回 -1。
int CppTest_StreamNSearch(CppTest_StreamRedirect redirect, const char pattern, unsigned int size)用于验证重定向的 stdout/stderr 流的内容。在重定向流中搜索给定模式的第一个 'size’字符。返回在流中找到的模式的索引,如果未找到模式,则返回 -1。
char CppTest_StreamReadData(CppTest_StreamRedirect redirect, unsigned int* len)返回一个指向缓冲区的指针,其中包含从重定向流中读取的数据。缓冲区的大小将在 'len' 参数中传回(如果将非空值传递给函数)。缓冲区由 cpptestMalloc()函数分配。应该使用 cpptestFree() 函数释放返回的缓冲区。
void CppTest_StreamReset(CppTest_StreamRedirect* redirect)将 C++test 内部流重置为默认状态。它在测试用例执行结束时为每个重定向流自动完成。

示例

有如下被测函数

int foo() {
int number;
// 从用户获取输入
printf("Please enter an integer: \n");
scanf("%d", &number);
// 使用if-else语句判断输入的数字是否为正数
if (number > 0) {
printf("%d is a positive number.\n", number);
} else if (number < 0) {
printf("%d is a negative number.\n",number);
} else {
printf("This is zero.\n");
}
return number;
}

示例测试用例如下:

/* CPPTEST_TEST_CASE_BEGIN test_foo_m1 */
/* CPPTEST_TEST_CASE_CONTEXT int foo(void) */
void TestSuite_sensor_c_61678bb2_test_foo_m1()
{
/* Pre-condition initialization */
CppTest_StreamRedirect* _stdinStreamRedirect = CppTest_RedirectStdInput("-1\n");
CppTest_StreamRedirect* output_stream = CppTest_RedirectStdOutput();
/* Pre-condition report */
{
/* Tested function call */
int _return  = foo();
int len;
CppTest_StreamReset(_stdinStreamRedirect);
/* Post-condition report */
CPPTEST_REPORT_INTEGER("Output: int _return", ( _return ));
/* Post-condition check */
CPPTEST_POST_CONDITION_INTEGER("int _return", ( _return ));
CPPTEST_POST_CONDITION_CSTR("messages",CppTest_StreamReadData(output_stream, &len));
/* Post-condition check */
CPPTEST_ASSERT_CSTR_EQUAL("Please enter an integer: \n-1 is a negative number.\n",CppTest_StreamReadData(output_stream, &len));
CPPTEST_ASSERT(0 == CppTest_StreamCompare(output_stream, "Please enter an integer: \n-1 is a negative number.\n"));
CPPTEST_ASSERT_INTEGER_EQUAL(-1, ( _return ) );
}
}
/* CPPTEST_TEST_CASE_END test_foo_m1 */

下面是这条测试用例的执行结果:

通过测试结果可以看到Parasoft C/C++test成功通过流重定向API自动化完成了对交互式函数的测试:它精准地模拟了标准输入,捕获并验证了完整的输出信息及返回值,证明了​​​​​​​Parasoft C/C++test在替代人工进行I/O操作测试方面的可靠性。

Parasoft C/C++test提供的流API不仅解决了标准输入输出模拟这一具体测试难题,更体现了其作为全面测试平台的核心理念——通过集成静态分析、单元测试、合规验证等多种能力,为客户构建端到端的代码质量保障体系,最终确保关键系统满足最高的安全与可靠性要求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用 Zig 实现英文数字验证码识别

一、背景介绍 验证码(CAPTCHA)是互联网应用中广泛使用的安全机制之一,主要用于区分真实用户与自动化程序。英文数字验证码识别可以通过 OCR 技术实现。本文将基于 Zig 语言 调用 Tesseract OCR,构建一个轻量级识别…

用 Crystal 实现英文数字验证码识别工具

一、项目简介 更多内容访问ttocr.com或联系1436423940 验证码识别是现代图像处理与 OCR(光学字符识别)技术的重要应用场景之一。本文将使用 Crystal 编程语言构建一个英文数字验证码识别工具,调用 Tesseract OCR 引…

实用指南:Java 面试 -Java基础

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于 Nim 的英文数字验证码识别工具实现

一、项目介绍 验证码识别是图像处理与字符识别的典型应用场景之一。本文将基于 Nim 编程语言实现一个简单的英文数字验证码识别工具,通过调用 Tesseract OCR 引擎,实现图像到字符的转换,探索 Nim 在图像处理场景下的…

怎么建立网站快捷方式企业融资渠道及技巧

https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/ng/app转载于:https://www.cnblogs.com/zhangchengyuan/p/5623348.html

完整教程:数组(Java基础语法)

完整教程:数组(Java基础语法)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

网站收录怎么删班级网站建设方案

静态站点生成器大解析&#xff1a;找出哪一款最适合你 前言 本文将探讨六种不同的静态站点生成器和React框架&#xff0c;包括Gatsby&#xff0c;Next.js&#xff0c;Jekyll&#xff0c;Hugo&#xff0c;Hexo和Eleventy。这些工具各有特色&#xff0c;提供了丰富的功能和使用…

wp网站模板亲子游网站建设内容

CSS之盒子模型 margin: 用于控制元素与元素之间的距离&#xff1b;margin的最基本用途就是控制元素周围空间的间隔&#xff0c;从视觉角度上达到相互隔开的目的。padding: 用于控制内容与边框之间的距离&#xff1b;Border(边框): 围绕在内边距和内容外的边框。Content(内容): …

做网站都需要什么步骤网络管理网址

解题思路&#xff1a; 首先分别将pattern字符串转为字符数组p&#xff0c;将s字符串根据" "切割为字符串数组s1&#xff0c;判断两个数组的长度是否相等&#xff0c;如果不相等&#xff0c;则返回false。之后对两个数组的每个元素与哈希表做比对&#xff0c;哈希表的…

宁波做百度网站音乐版权购买网站

1.插件化开发概述 插件化开发模式正在很多编程语言或技术框架中得以广泛的应用实践&#xff0c;比如大家熟悉的jenkins&#xff0c;docker可视化管理平台rancher&#xff0c;以及日常编码使用的编辑器idea&#xff0c;vscode等。 实现服务模块之间解耦的方式有很多&#xff0…

深入解析:python+django/flask哈利波特书影音互动科普网站

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

手机建立网站软件兴趣电商平台有哪些

一.利用写好的数据库表生成创建表的sql语句 1.简单创建一个数据库&#xff0c;并建一个表&#xff0c;并编辑数据。 a.建库 b.建表 c.编辑表&#xff0c;保存时输入表名 d.刷新一下&#xff0c;出来了 e.转存导出sql文件。 二.利用生成的数据库创建表加同步数据sql。…

重庆装修公司电话游戏seo推广

来源&#xff1a;机器之心除了量子计算&#xff0c;量子物理学的应用范畴还很广。近日&#xff0c;美国东北大学物理学教授 Gregory Fiete 探讨了量子研究的广泛应用。量子物理学家研究的世界与普通人每天生活的世界是同一个&#xff0c;唯一的区别是它被科学家「缩放」到了无法…

广告网站留电话网站开发大概价格

HBase概述 1. Why we need HBase &#xff1f; 在大数据时代来临之前&#xff0c;我们通常依赖传统的关系型数据库&#xff08;如RDBMS&#xff09;来处理数据存储和管理。然而&#xff0c;随着数据量的急剧增长和数据结构的多样化&#xff0c;传统数据库系统开始显露出其局限性…

AI信任心理学:构建可信赖人工智能系统的实用指南

本文深入探讨人工智能系统中的信任心理学,提出基于能力、善意、诚信和可预测性四大支柱的信任框架。文章详细介绍了测量用户对AI信任度的研究方法,包括定性访谈、定量量表和行为指标,并提供了具体的设计策略来构建更…

深入解析:CodeForces479A-Expression(数学+枚举)

深入解析:CodeForces479A-Expression(数学+枚举)2025-09-27 09:20 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

完整教程:编程语言综合教程:Java、Python、C++、Go 全面解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

英语_阅读_Robot

People often ask smartphones questions and expect quick answers. 人们经常向智能手机提问,并期望迅速得到答案。 So what makes humans trust smart machines? Researchers want to know. 那么,是什么让人类信任…

网站怎么做不违法怎样怎样优化网站建设

1.鞋子到了 2.网络一天没有好 3. 又吸烟了,难受 4. 单双杠&#xff1a;60 5. 洗澡&#xff1a;no 6. 仰卧起坐&#xff1a;100 7. 洗脚/刷牙 8.曾的车 9.老梁关世界 总结&#xff1a;今天还好吧&#xff0c;但我还是很想znn&#xff01;&#xff01; 转载于:https://www.cnblo…

做网站后台要学什么自己做视频网站 在优酷推广

前一天晚上&#xff0c;用360清理缓存文件后&#xff0c;早上起来一看快捷方式的箭头图标不见了&#xff0c;左下角变成了一片白色。试了很多方法&#xff0c;比如说删除iconcache.db&#xff0c;然后重启资源管理器等等&#xff0c;发现没有用。然后&#xff0c;装上360桌面助…