3

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

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

这会保存字符串的第一个字符,但不会保存整个字符串。

4

2 回答 2

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 来捕获结构中的参数值。

于 2014-07-30T12:58:03.633 回答
0

可能是这样的:

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

由于 SaveArg(pointer) 将第 N 个参数保存到 *pointer。

我认为如果您只需要验证数组的内容而无需深拷贝,则无需创建另一个数组,因为使用此方法只能获取指向数组的指针。

于 2014-07-20T04:56:42.050 回答