私は現在、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
提案されているように、私は試しました。
また、unique_ptrを生成する独自の記述を試みましValueWrapper<T>
たが、どこかで値が常にコピーされます。今、私はアイデアを使い果たしました。