没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|使用教程|编辑:张莉|2025-11-13 15:15:52.390|阅读 85 次
概述:Parasoft C/C++test作为一款专业的自动化测试工具,广泛用于C/C++语言的静态分析、单元测试及覆盖率验证。然而,在实际测试过程中,抽象类因包含纯虚函数而无法直接实例化,导致其成员函数的自动化测试面临挑战。下面将会深入探讨如何在C++test环境中通过手动创建与适配测试用例的方式,实现对抽象类中非虚成员函数的有效测试。
#界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
单元测试作为软件质量保障的重要环节,对确保代码逻辑正确性具有关键作用。Parasoft C/C++test作为一款专业的自动化测试工具,广泛用于C/C++语言的静态分析、单元测试及覆盖率验证。然而,在实际测试过程中,抽象类因包含纯虚函数而无法直接实例化,导致其成员函数的自动化测试面临挑战。下面将会深入探讨如何在C++test环境中通过手动创建与适配测试用例的方式,实现对抽象类中非虚成员函数的有效测试。
问题描述
产品:C++test 9.5
环境:Windows
问题:C++test抽象类单元测试
现象:对抽象类,无法声明对象,如何测试抽象类里的成员函数呢?
详细现象
现在我们对我们的两个类(类 A和类 B)生产测试用例,其中类 A是一般的类,类B为抽象类,也就是类B里含有至少一个纯虚函数:
class A
{
public:
virtual int fun_vir(int a){ return a;}
A(int a);
private:
A();
int c;
};
class B
{
public:
virtual int fun_vir_2(int a) = 0;
float fun3(float b)
{
return b+3.0;
}
B();
private:
int d;
static A cl_a;
};
我们得到如下所示的控制台提示信息

也就是对类B里的成员函数无法生成测试用例,此处也是因为B是一个抽象类,无法声明对象,无法实例化,而C++test在自动生成测试用例时,只能对能够实例化的类里的成员函数生成测试用例。
解决方案
那现在的问题是,针对抽象类里的成员函数要怎么测试呢?可按照如下方式:
1.使用测试用例向导的方式手动创建测试用例,如下图所示:

在该测试用例向导中,我们看到对于输入类B的对象给予值时,显示为红色的叉,而且无法选择更改,这也是由于类B的特殊性,但是此次我们不做更改操作,直接点击Finish
2.查看生成的测试用例
void TestSuite_ab_file_h_4fa5696c::test_fun3()
{
/* Pre-condition initialization */
/* Initializing argument 0 (this) */
/* Initializing argument 1 (b) */
float _b = 0.0f;
/* Tested function call */
float _return = _cpptest_TestObject.B::fun3(_b);
/* Post-condition check */
CPPTEST_POST_CONDITION_FLOAT("float _return", ( _return ));
CPPTEST_POST_CONDITION_INTEGER(" _cpptest_TestObject.d", ( _cpptest_TestObject.d ));
}
直接运行测试用例,失败,控制台中错误信息如下:
void TestSuite_ab_file_h_4fa5696c::test_fun3()
{
/* Pre-condition initialization */
/* Initializing argument 0 (this) */
/* Initializing argument 1 (b) */
float _b = 0.0f;
/* Tested function call */
float _return = _cpptest_TestObject.B::fun3(_b);
/* Post-condition check */
CPPTEST_POST_CONDITION_FLOAT("float _return", ( _return ));
CPPTEST_POST_CONDITION_INTEGER(" _cpptest_TestObject.d", ( _cpptest_TestObject.d ));
}
由于B无法声明一个对象,那么我们生成的测试用例中没有如下一句new一个对象的语句:
::B _cpptest_TestObject;
那在测试用例中使用_cpptest_TestObject时就会报告错误。
3.在测试用例中添加上声明对象的语句
添加上这行语句
::B _cpptest_TestObject;
运行,仍然失败:
[ab_file.cpp] "f:\sfan\parasoft\Projects\abstract_example\abstract_example\tests\autogenerated\头文件\TestSuite_ab_file_h.cpp", line 245: error: [ab_file.cpp] object of abstract class type "B" is not allowed: [ab_file.cpp] function "B::fun_vir_2" is a pure virtual function [ab_file.cpp] ::B _cpptest_TestObject; [ab_file.cpp] ^
原因是,B是抽象类不能生成对象。
4.修改为新建一个指针
对测试用例我们做如下修改,不声明一个新的对象,而是创建一个指针
void TestSuite_ab_file_h_4fa5696c::test_fun3()
{
/* Pre-condition initialization */
/* Initializing argument 0 (this) */
::B * _cpptest_TestObject;
/* Initializing argument 1 (b) */
float _b = 0.0f;
/* Tested function call */
float _return = _cpptest_TestObject->B::fun3(_b);
/* Post-condition check */
CPPTEST_POST_CONDITION_FLOAT("float _return", ( _return ));
}
同样运行,成功。
测试套件开始: TestSuite_ab_file_h_4fa5696c 测试用例开始: test_fun3 结果: float _return=3.000000e+000 状态: OK 测试用例结束: test_fun3 测试套件结束: TestSuite_ab_file_h_4fa5696c
并且我们得到了覆盖率信息:
从上文中可知,对于抽象类中的成员函数,C++test不能自动生成,但是我们可以结合手动创建以及修改的方式来完成对抽象类中的成员函数的测试。
通过手动创建测试用例并结合适当的代码调整,Parasoft C/C++test能够有效解决抽象类成员函数的单元测试难题。这一方法不仅扩展了工具在复杂场景下的适用性,也体现了其灵活应对不同代码结构的能力。除抽象类测试外,C++test还提供静态代码分析、运行时错误检测、覆盖率度量等综合功能,帮助客户在持续集成与开发早期阶段发现潜在缺陷,提升代码质量与可维护性,最终为高可靠性软件的交付提供全面支撑。
关于慧都
慧都科技(EVGET)成⽴于2003年,是⼀家⾏业数字化解决⽅案公司,⻓期专注于软件、油⽓与制造⾏业。公司基于深⼊的业务理解与管理洞察,以系统化的业务建模驱动技术落地,帮助企业实现智能化运营与⻓期竞争优势。
慧都科技作为Parasoft公司在中国区的官方授权合作伙伴,为国内企业提供Parasoft C/C++test产品的正版授权、定制化部署与全生命周期技术支持与服务。我们致力于助力客户精准贯彻功能安全标准、全面提升软件开发效率、有效管控项目风险,最终构建符合国际标准的高质量软件体系。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com




默认情况下,二维码由方形模块(点)组成。新版FastReport .NET增加了自定义二维码的功能。
在本教程中,您将学习如何快速创建发票模板、进行美化并最终获得成品。
本文将为大家介绍当使用DevExpress WinForms的Data Grid组件时拥有大量数据源时的服务器模式与即时反馈模式,欢迎下载最新版组件体验!
本文主要介绍了DevExpress MCP Server 如何将官方文档以 MCP 协议接入 AI 助手,从而帮助开发者更高效、准确地获取技术支持和开发指导。
相关产品
针对 C/C++ 软件开发提供统一、完全集成的测试解决方案。
Parasoft Jtest用于应用软件开发的集成Java测试工具
Parasoft dotTEST降低C#和VB.NET开发风险,有效地实现符合C#和.NET开发的测试工具的要求
最新文章 MORE
相关文章 MORE
服务电话
重庆/ 023-68661681
华东/ 17382392642
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2026 渝ICP备12000582号-13 
渝公网安备
50010702500608号
首页