c++ - google mock - 如何在变量名即标识符上进行 EXPECT_CALL

标签 c++ googletest googlemock

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

EXPECT_CALL(MockClass_obj, target_func());

签名是:

void MockClass::target_func(HANDLE_t handle);

参数 handle是一种不透明类型,它是一些其他函数中的全局集,所以是的,我需要 stub 它。

问题是:在我正在测试的函数中,我调用了 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) 将独特的值(value)观分开; b) 依靠代码审查来发现人们对句柄值进行算术运算。

如果 target_fun 通过引用获取它的参数,那么您可能能够根据引用的地址执行 EXPECT - 但是我不会打扰。

关于c++ - google mock - 如何在变量名即标识符上进行 EXPECT_CALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44116504/

相关文章:

c++ - 为 gmock 自动生成模拟类

c++ - C++显示文件内容

c++ - 我可以在 if 语句中使用 "x=2"作为参数吗?

c++ - 如何断言谷歌测试中的执行时间?

c++ - 谷歌模拟全局模拟对象内存泄漏

c++ - 如何为二维数组编写一个好的GMock匹配器?

c++ - 类的透明聚合

c++ - 在 C++ 中到达 .eof() 后如何返回到文件的开头?

c++ - 枚举和对象之间的 gtest 比较

c++ - 在 C++ 类的构造函数中抛出异常是好习惯吗?