首页 > 解决方案 > 将 lambda 作为参数的函数的 gmock expect_call 编译失败

问题描述

我正在使用 gtest/gmock 为我的班级编写单元测试。单元测试代码编译失败。

模拟声明是

MOCK_METHOD2(GetFilesFromDirectory, std::shared_ptr<std::list<WIN32_FIND_DATAW>>(const std::wstring &directory, std::function<bool(const WIN32_FIND_DATAW &)> filter));

然后我在其他方法的测试用例中为此方法编写了一个 EXPECT_CALL,如下所示,编译失败。

std::function<bool(const WIN32_FIND_DATAW &)> filesFilter = [](const WIN32_FIND_DATAW &fileData) -> bool {
    return true;
};

EXPECT_CALL(*mock, GetFilesFromDirectory(std::wstring(L"testDirectory"), filesFilter)).WillOnce(Return(fileListPtr));

我得到的错误是

错误 C2678 二进制“==”:未找到采用“const std::function”类型的左操作数的运算符(或没有可接受的转换)

我想知道为什么会发生此错误以及如何解决此问题。

标签: c++googletestgooglemock

解决方案


推荐阅读