HippoMocks 通过引用模拟返回值

HippoMocks mocking return values by ref

本文关键字:模拟 返回值 引用 HippoMocks      更新时间:2023-10-16
class IEmployeeServiceProxy
{
public:
    virtual ~IEmployeeServiceProxy() { }
    virtual void AddEmployee(const Employee&) = 0;
    virtual int GetEmployees(std::vector<Employee>&) = 0;
};
struct Employee
{
    boost::uuids::uuid Id;
    std::string Name;
};
m_Mocks.ExpectCall(m_EmpSvcMock.get(), IEmployeeServiceProxy::GetEmployees).Return???;

如何模拟它,以便它通过参数而不是 int(这是方法的返回类型(返回 std::vector?

另外,如果有超过 1 个 ref 参数怎么办?

你必须自己为引用提供对象,确保模拟使用With使用它,你可以改变它,将一个函数传递给Do,这也提供了返回值。有多少参考参数并不重要。例:

int AddSomeEmployees( std::vector< Employee >& v )
{
  v.push_back( Employee() );
  return 0;
}
  //test code
std::vector< int > arg;
mocks.ExpectCall( empSvcMock, IEmployeeServiceProxy::GetEmployees ).With( arg ).Do( AddSomeEmployees );

请注意,Do可以接受任何类型的函数,也可以是 std::function、lambda 等。

Git 版本(最新版本(有一个 Out 参数选项,几乎就是这个。要使用

std::vector<int> args; args.push_back(1); args.push_back(2);
mocks.ExpectCall(mock, IInterface::function).With(Out(arg));