繁体   English   中英

谷歌模拟-如何EXPECT_CALL的变量名称即标识符

[英]google mock - how to EXPECT_CALL on a variable name i.e. identifier

我有一个我需要检测其调用的函数,即

EXPECT_CALL(MockClass_obj, target_func());

签名是:

void MockClass::target_func(HANDLE_t handle);

参数handle是不透明的类型,并且是其他函数中的全局设置,因此是的,我需要将其存根。

这是问题所在:在我正在测试的函数中,我根据调用的MockClass::target_func使用一些不同的参数调用MockClass::target_func

//MockClass inherits Class, call f1() with instance of MockClass
void f1(int a, Class & obj)
{
    switch(a):
    {
    case 0:
        obj.target_func(global_handle_1);
        break;
    case 1:
        obj.target_func(global_handle_2);
        break;
    default:
        obj.target_func(global_handle_3);

    }
}

如何根据参数的名称进行期望调用? 我需要检测走哪条路。

由于所有global_handle_[x]变量都会被存根,即设置为任意值,因此我可以将它们设置为global_handle_<x>=<x> ,然后设置EXPECT_CALL(MockClass_obj, target_func(<x>));

我想这已经足够好了,但是要更强大,理想情况下,我想对变量名进行EXPECT_CALL吗?

这可能吗?

您所要求的基本上是C ++无法实现的。 target_func通过值传递其参数,因此没有办法(或它的模拟版本)知道如何计算该值。 该调用可以是obj.target_func(global_handle_1); 或者可以是obj.target_func(global_handle_2 - 1); (如果这些表达式碰巧具有相同的值)。

我认为您最好的选择是给每个全局变量一个唯一的值,然后EXPECT正确的值。 我会:a)将独特的价值观分开; b)依靠代码审查来发现对句柄值进行算术运算的人员。

如果target_fun通过引用接受了它的参数,那么您也许可以根据引用的地址执行EXPECT但我不会打扰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM