我正在为嵌入在C(或C ++)应用程序中的脚本语言编写测试用例,其中一个特点是脚本语言调用“主机”程序中的方法。整个项目都使用谷歌测试框架,下面是其中之一的测试:
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_START
和 SCRIPT_END
宏,它们只是创建/销毁脚本语言对象(NAP_EXPORTS
被定义为 extern "C"
,以便动态库加载器可以解析名称)。正如您所见,该脚本定义了一个外部方法(来自主机应用程序),然后调用它。现在我确定该方法被调用,因为我可以在 stderr/output 上看到
a
和 b
的值,但是...这感觉像是手动测试 :) 如何使用 Google 测试框架确保该方法实际被调用,而无需查看屏幕?(我想避免 hackish 解决方案,比如使用全局标志...)
external_callee
的签名更改为包括FILE*
而不是硬编码的stderr
? - John Zwinckint
)和 C 类型(nap_int_t
)之间必须匹配。 - Ferenc Deak