1
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 参数怎么办?

4

2 回答 2

2

您必须自己提供对象以供参考,确保模拟使用它 usingWith并且您可以更改它,将函数传递给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、lambdas 等。

于 2012-08-02T07:49:22.983 回答
2

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

std::vector<int> args; args.push_back(1); args.push_back(2);
mocks.ExpectCall(mock, IInterface::function).With(Out(arg));
于 2012-08-02T07:55:08.863 回答