Parasoft C/C++test如何使用桩函数替代MFC窗口类顺利执行单元测试

在现代软件开发过程中,自动化单元测试是确保代码质量与可靠性的关键环节。尤其对于特定框架(如MFC)的代码,测试复杂度显著增加,常因依赖外部资源或交互操作而难以在静默环境中顺利执行。Parasoft C/C++test作为专业的软件测试工具,致力于帮助开发团队高效实施自动化测试,通过其强大的桩函数功能,能够有效模拟依赖组件的行为,从而实现对复杂逻辑的隔离测试。

C++test单元测试通常是要求被测试单元能够在静默的情况下执行,而不需要太多的人为交互操作。所以在测试类似于下面的MFC窗口代码时,会执行失败。或者无法执行到窗口初始化以后的代码。

lang-js 复制代码
void CCOMTestDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}

在这里我们为了能够执行到IF判断为TRUE的语句。需要对IsIconic()打桩。手动返回TRUE的值。

桩函数内容为返回true。

再次执行后,发现执行都会在下面这行代码中停下来,执行失败。

在质量任务面板中发生运行时异常。

这是因为CPaintDC dc(this); 这个语句是需要初始化this这个对象,而this是一个窗口程序。初始化一个图形化的组件,而测试它会涉及到非常多的额外工作。比如需要初始化整个应用程序,包括GUI的组件。然后在测试的时候通常也会需要打开窗口,按按钮这些需要人来 参与的交互式方式,但是这些都不是单元测试的方式。在测试这个部分的时候,一个方面是需要一些人为的操作或者初始化一些具体的对象和窗口,所以这个部分通常会以报告异常来提示用户。

对一些关于"view"部分的代码通过打桩来替代其真实调用。

比如我们可以对这个例子的CPaintDC dc(this)打桩。右键选择这个函数,生成用户自定义桩函数,然后再次执行测试用例。

那么这个当初在测试执行过程中运行不到的代码会正常的通过,后续的逻辑代码也就能测试到了。

当然这个例子桩函数不需要设计太多的代码。如果对于一些需要桩函数返回特定的值,或者需要初始化某些变量的情况,则需要手动完成。

Parasoft C/C++test在应对GUI及框架相关代码的单元测试中表现出了卓越的灵活性与实用性。其打桩机制不仅解决了测试环境对图形组件的依赖问题,还显著提升了测试的自动化程度和可重复性。此外,Parasoft C/C++test还提供静态代码分析、运行时错误检测、覆盖率统计等全面功能,能够帮助客户在开发早期发现潜在缺陷,优化代码结构,并确保符合行业标准与合规要求。

相关推荐
软件检测小牛玛2 天前
具备软件功能测试资质的机构哪家更权威?山东软件测评机构 中承信安
功能测试·单元测试·软件测试报告·软件测评机构
闻哥2 天前
从测试坏味道到优雅实践:打造高质量单元测试
java·面试·单元测试·log4j·springboot
Warren982 天前
Pytest Fixture 作用域与接口测试 Token 污染问题实战解析
功能测试·面试·单元测试·集成测试·pytest·postman·模块测试
知行合一。。。2 天前
程序中的log4j、stderr、stdout日志
python·单元测试·log4j
测试秃头怪2 天前
面试大厂就靠这份软件测试八股文了【含答案】
自动化测试·软件测试·python·功能测试·面试·职场和发展·单元测试
测试大圣2 天前
软件测试基础知识总结(超全的)
软件测试·python·功能测试·测试工具·职场和发展·单元测试·测试用例
CodeCraft Studio3 天前
【Parasoft案例分享】在 DO-178C 标准下,如何实现航空嵌入式软件测试自动化
单元测试·自动化·静态分析·代码覆盖率·parasoft·do-178c·软件自动化测试
懒羊羊大王&4 天前
软件测试之博客系统项目实战(补充和解析部分)
selenium·单元测试·测试用例·集成测试
真智AI4 天前
用 LLM 辅助生成可跑的 Python 单元测试:pytest + coverage 覆盖率报告(含运行指令与排坑)
python·单元测试·pytest