Unit testing 使2个指针指向与google测试操作相同的地址
我需要测试失败的情况,并将两个指针设置为相同的值,将errno设置为0并返回0(根据文档:“如果字符串转换失败,则返回零,而endptr返回nptr(如果endptr为非NULL)”)(即使在我的情况下output_str=NULL)Unit testing 使2个指针指向与google测试操作相同的地址,unit-testing,glib,googlemock,Unit Testing,Glib,Googlemock,我需要测试失败的情况,并将两个指针设置为相同的值,将errno设置为0并返回0(根据文档:“如果字符串转换失败,则返回零,而endptr返回nptr(如果endptr为非NULL)”)(即使在我的情况下output_str=NULL) 我要测试的代码: gchar* output_ptr= NULL; gchar* input_ptr= "f"; result = g_ascii_strtoll(input_ptr, &output_ptr, 10); 我的谷歌测试
我要测试的代码:
gchar* output_ptr= NULL;
gchar* input_ptr= "f";
result = g_ascii_strtoll(input_ptr, &output_ptr, 10);
我的谷歌测试片段:
const gchar* nptr;
EXPECT_CALL(mock_gstring, g_ascii_strtoll(_,_,_)).WillOnce( DoAll(SaveArg<0>(&nptr), SetArgReferee<1>((char)*nptr), SetErrnoAndReturn(0,0)) );
const gchar*nptr;
期望调用(mock\u gstring,g\u ascii\u strtoll(u,u,u,u)).WillOnce(DoAll(SaveArg(&nptr)、setargreference((char)*nptr)、SetErrnoAndReturn(0,0));
基本上,我只想做
*输出\u ptr=(gchar*)输入\u ptr
但是Google测试了一些动作,但我无法让它正常工作…我不知道你的情况是什么,所以这可能不相关,但这里有两点(抱歉,这两点都不能回答你的googlemock问题):
- 您可能会发现它比
更易于使用。对于将整个字符串解析为整数的主要用例,它具有等效的功能g\u ascii\u strtoll()
- GLib中的函数是在中测试的,因此您不需要编写自己的重复测试。但是,如果您在GLIB中发现了bug并正在测试,请考虑每个人都可以受益。
因此,不是:
const gchar* nptr;
EXPECT_CALL(mock_gstring, g_ascii_strtoll(_,_,_)).WillOnce( DoAll(SaveArg<0>(&nptr), SetArgReferee<1>((char)*nptr), SetErrnoAndReturn(0,0)) );
在
Invoke
中调用的函数必须与模拟的函数具有相同的参数,或者使用Unused
keywork(我没有测试此选项)。感谢您的反馈!不幸的是,我没有机会选择要测试的函数,但我会向我的团队推荐它。我们必须为所有开发提供单元测试,但我会去检查他们在GLib单元测试中的表现。为什么不直接运行GLib单元测试?因为它是更大项目的一部分,我们需要用相同的框架覆盖整个项目。TBH,我是被要求这样做的,我还是新的工作,所以我没有太多问题。。。
void ut_pointer_cpy(const gchar *nptr, gchar **endptr, guint base){
*endptr= (gchar *)nptr;
}
EXPECT_CALL(mock_gstring, g_ascii_strtoll(_,_,_))
.WillOnce( DoAll(Invoke(ut_pointer_cpy), SetErrnoAndReturn(0,0)) );