Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 使2个指针指向与google测试操作相同的地址_Unit Testing_Glib_Googlemock - Fatal编程技术网

Unit testing 使2个指针指向与google测试操作相同的地址

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); 我的谷歌测试

我需要测试失败的情况,并将两个指针设置为相同的值,将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);
我的谷歌测试片段:

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))  );