google mock - 如何 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 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) space 独特的价值分开; b) 依靠代码审查来发现人们对句柄值进行算术运算。
如果 target_fun
通过引用获取它的参数,那么您 可能 能够根据引用的地址执行 EXPECT
- 但我不会打扰。
我有一个函数,我需要检测其调用,即
EXPECT_CALL(MockClass_obj, target_func());
签名是:
void MockClass::target_func(HANDLE_t handle);
参数 handle
是一种不透明类型,它是其他函数中的全局集合,所以是的,我需要将其存根。
这是问题所在:在我正在测试的函数中,我根据所采用的分支使用一些不同的参数调用 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) space 独特的价值分开; b) 依靠代码审查来发现人们对句柄值进行算术运算。
如果 target_fun
通过引用获取它的参数,那么您 可能 能够根据引用的地址执行 EXPECT
- 但我不会打扰。