没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|使用教程|编辑:张莉|2025-09-24 11:35:18.763|阅读 50 次
概述:在单元测试中,一个常见的挑战是如何对依赖于标准输入、输出和错误流的函数进行有效测试。一个函数可能通过printf向控制台打印信息,或通过scanf从用户获取输入。在自动化测试环境中,我们无法进行人工交互,因此需要一种方法来模拟这些输入并捕获输出,以便进行验证。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
在单元测试中,一个常见的挑战是如何对依赖于标准输入、输出和错误流的函数进行有效测试。例如,一个函数可能通过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不仅解决了标准输入输出模拟这一具体测试难题,更体现了其作为全面测试平台的核心理念——通过集成静态分析、单元测试、合规验证等多种能力,为客户构建端到端的代码质量保障体系,最终确保关键系统满足最高的安全与可靠性要求。
关于慧都
慧都是一家行业数字化解决方案公司,专注于软件、石油与工业领域,以深入的业务理解和行业经验,帮助企业实现智能化转型与持续竞争优势。在软件工程领域,我们提供开发控件、研发管理、代码开发、部署运维等软件开发全链路所需的产品,提供正版授权采购、技术选型、个性化维保等服务,帮助客户实现技术合规、降本增效与风险可控。
慧都科技作为Parasoft公司在中国区的官方授权合作伙伴,为国内企业提供Parasoft C/C++test产品的正版授权、定制化部署与全生命周期技术支持与服务。我们致力于助力客户精准贯彻功能安全标准、全面提升软件开发效率、有效管控项目风险,最终构建符合国际标准的高质量软件体系。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@ke049m.cn
注意: Cogent DataHub 软件 v11 包含一些新功能,您的目标操作系统可能不支持这些功能。
本教程主要为大家介绍如何使用DevExpress WinForms数据网格控件进行数据排序的基础知识,欢迎下载最新版组件体验!
在使用Parasoft C/C++test执行BugDetective数据流分析时,可能会遇到用户自定义的资源API,那在这种情况下,若要判断是否存在资源问题,如资源泄露等,则需要手动配置测试配置。
大型SaaS系统的自动化测试常常受制于界面变化快、结构复杂、加载机制多变等因素。从元素识别到脚本管理,SmartBear TestComplete帮助Salesforce建了可靠的自动化测试体系。
针对 C/C++ 软件开发提供统一、完全集成的测试解决方案。
Parasoft Jtest用于应用软件开发的集成Java测试工具
Parasoft dotTEST降低C#和VB.NET开发风险,有效地实现符合C#和.NET开发的测试工具的要求
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢