我目前没有成功模拟返回 unique_ptr 的接口。例如,给定
struct IFoo {
virtual std::unique_ptr<IFoo> foo = 0;
};
int main()
{
MockRepository mocks;
auto foo = mocks.Mock<IFoo>();
mocks.OnCall( foo, IFoo::foo )
.Return( std::unique_ptr<IFoo>() );
}
这无法编译,因为Return
实现复制了 unique_ptr
Call &Return(Y obj) { retVal = new ReturnValueWrapper<Y>(obj); return *this; }
并且期望尝试返回 unique_ptr
template <typename Z>
Z MockRepository::DoExpectation(base_mock *mock, std::pair<int, int> funcno, const base_tuple &tuple)
{
...
return ((ReturnValueWrapper<Z> *)call->retVal)->rv;
}
我已经尝试过Do
,正如针对返回引用的类似问题所建议的那样。
我也尝试过编写自己的ValueWrapper<T>
生成 unique_ptr 的方法,但值总是在某处被复制。现在我已经没有想法了。