Google测试:接受向量作为参数的操作

时间:2019-02-05 11:21:24

标签: c++ c++11 googletest

我在下面定义了一个GoogleTest操作。

ACTION_P5(ReadAction, aa, bb, cc, dd, ee) {

    shared_ptr<DataResponse> response = move(DataResponse::Create());

    response->DataV3.a = aa;
    response->DataV3.b = bb;
    response->DataV3.c = cc;
    response->DataV3.d = dd;
    response->DataV3.e = ee;

    return response;
}

将消息发送到接口时,将调用此函数。结构response中的前四个值(即abcd)是数字。但是第五个是vector中的uint8_t

上述作业是否可以正常工作?我错过了什么吗?由于Action是宏驱动器,因此如何确保类型安全。

1 个答案:

答案 0 :(得分:0)

您是说response->DataV3.e和操作参数eevector<uint8_t>的类型吗?

如果是,则分配工作正常。它将以您期望的方式工作(通过vector的赋值运算符的性质进行深度复制)。

一个值得关注的问题是, gmock 内部为内部操作构建了一些数据结构,这导致了几次复制构造。对于大向量,这可能是巨大的开销。如果您想避免那些不需要的副本,则可能需要使用引用包装(例如,使用std::ref)或将其作为指针传递。然后在真正分配它时复制一次。