C++ EXPECT\u调用中变量的使用

C++ EXPECT\u调用中变量的使用,c++,c++11,googlemock,C++,C++11,Googlemock,我有一个用于串行接口的简单模拟类: class MockSerialPort : public drivers::SerialPort { public: MockSerialPort() : SerialPort(){}; MOCK_METHOD((Result<size_t>), Read, (uint8_t *, size_t, (const duration<int64_t, std::micro> &)), (override));

我有一个用于串行接口的简单模拟类:

class MockSerialPort : public drivers::SerialPort
{
  public:
    MockSerialPort() : SerialPort(){};

    MOCK_METHOD((Result<size_t>), Read, (uint8_t *, size_t, (const duration<int64_t, std::micro> &)), (override));
    MOCK_METHOD((Result<size_t>), Write, (const uint8_t *, size_t), (override));
};
正确的语法是什么?如果我如上所述指定变量,那么其中的值就是我们期望的值。但是,我如何不让expect调用失败,并实际存储调用方读取的指定值呢?

在这种“复杂”的情况下-使用lamdba表达式-或其他函数,functor对象:


EXPECT_CALL(port_, Read(NotNull(),_ ,_))
                .WillOnce([](uint8_t *data, size_t length, const duration<int64_t, std::micro> &) {
   // do with data and length whatever you want
   return length;
});


预期\调用(端口\读取(NotNull(),\,\)
.WillOnce([](uint8\u t*数据、大小\u t长度、常数持续时间&){
//可以根据需要处理数据和长度
返回长度;
});
这是可能的,因为gtest1.10-但从您正在使用MOCK_方法的事实来看-我看到您正在使用最新的gtest


简而言之,在
EXPECT\u调用
参数中指定一个特定值时,将
DoAll(..)
替换为一些类似于functor对象的lambda表达式。

该参数被用作与值精确匹配的指令。因此,除非调用者提供具有相同值的参数,否则期望值将不匹配,操作将不会执行。@VladLosev:我真的对
Read
调用者使用的大小不感兴趣。我会用
\uu
来做这件事。但是知道这个值会很好,这样就可以在数组参数中使用它了。

EXPECT_CALL(port_, Read(NotNull(),_ ,_))
                .WillOnce([](uint8_t *data, size_t length, const duration<int64_t, std::micro> &) {
   // do with data and length whatever you want
   return length;
});