gpt4 book ai didi

c++ - 谷歌测试 : how to check a global C (C++) function was called

转载 作者:太空狗 更新时间:2023-10-29 21:00:05 25 4
gpt4 key购买 nike

我正在为嵌入在 C(或 C++)应用程序中的脚本语言编写测试用例,其中一个特性是脚本语言从“宿主”程序调用方法。整个项目使用的是google测试框架,下面是其中一个测试:

TEST(Functions, ExternalCalling)
{
SCRIPT_START
" \
extern void external_callee(int, int); \
external_callee(1,2); \
"
SCRIPT_END
}

NAP_EXPORTS
void external_callee(nap_int_t a, nap_int_t b)
{
fprintf(stderr, "\na=%"PRINT_d", b=%"PRINT_d"\n", a, b);
if(a != 1 || b != 2) FAIL();
}

不要介意 SCRIPT_STARTSCRIPT_END 宏,它们只是创建/销毁脚本语言对象(NAP_EXPORTS 定义为 extern "C" 以便动态库加载程序可以解析名称)。

如您所见,脚本定义了一个外部方法(来自主机应用程序),然后调用它。现在我确定调用了该方法,因为我可以在 stderr/output 上看到 ab 的值但是是的......这有手动的感觉测试 :) 我如何使用谷歌测试框架来确保该方法实际上被调用而无需查看屏幕? (我想避免 hackish 解决方案,比如使用全局标志...)

最佳答案

您真正想要做的是模拟函数。

看看像 google-mock 这样的模拟框架.

EXPECT_CALL 宏可让您指定调用次数(使用参数过滤)。

另见 This SO Question如何创建 C 蹦床以将 C++ 接口(interface)隐藏在 C 代码后面。

如果您还想获得真实结果,您可能还对允许您将参数转发给真实实现的 invoke 函数感兴趣。

google mock cookbook具有上述所有使用模式的配方。

关于c++ - 谷歌测试 : how to check a global C (C++) function was called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23082799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com