捕获GMOCK字符串参数

时间:2014-06-24 15:09:33

标签: gmock

如果我有以下接口成员函数:

virtual bool print_string(const char* data) = 0;

使用以下模拟

MOCK_METHOD1(print_string, bool(const char * data));

是否可以捕获传递给print_string()的字符串?

我试图:

char out_string[20];     //
SaveArg<0>(out_string);  // this saves the first char of the sting

这会保存sting的第一个char而不是整个字符串。

2 个答案:

答案 0 :(得分:3)

<强>类

struct Foo {
    virtual bool print_string(const char* data) = 0;
};

<强>模拟

struct FooMock {
    MOCK_METHOD1(print_string, bool(const char * data));
};

测试

struct StrArg {
    bool print_string(const char* data) { 
        arg = data; 
        return true; 
    }
    string arg;
};

TEST(FooTest, first) {
    FooMock f;
    StrArg out_string;

    EXPECT_CALL(f, print_string(_))
        .WillOnce(Invoke(&out_string, &StrArg::print_string));
    f.print_string("foo");
    EXPECT_EQ(string("foo"), out_string.arg);
}

您始终可以使用Invoke捕获结构中的参数值。

答案 1 :(得分:0)

可能是这样的:

char* p = out_string[0];
SaveArg<0>(&p);

因为SaveArg(指针)将第N个参数保存到*指针。

我认为如果你只需要在没有深层复制的情况下验证数组的内容,就不需要创建另一个数组,因为只有使用这种方法才能获得指向数组的指针。