Тест Google: действие, которое принимает вектор в качестве параметра - PullRequest
0 голосов
/ 05 февраля 2019

У меня определено действие 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 (то есть a, b, c, d) являются числами.Однако пятый - это vector из uint8_t.

Будет ли указанное выше назначение работать правильно?Я что-то пропустил.Поскольку действие - это макропривод, как обеспечивается безопасность типов.

1 Ответ

0 голосов
/ 07 февраля 2019

Вы имеете в виду, что response->DataV3.e и параметр действия ee имеют тип vector<uint8_t>?

В этом случае назначение работает правильно.Он будет работать по вашему желанию (глубоко копируется по характеру оператора присваивания vector).

Одна проблема заключается в том, что gmock внутренне создает некоторые структуры данных для внутренних действийчто вызывает копирование конструкций в несколько раз.Это может быть огромные накладные расходы для больших векторов.Если вы хотите избежать этих нежелательных копий, вам может понадобиться обернуть ссылку (например, используя std::ref) или передать ее в качестве указателя.Затем просто скопируйте один раз, когда вы действительно назначите его.

...