Hippo Mocks を使用して大成功を収めていますが、適切に設定する方法がよくわからないという状況があります。テスト中のコードは次のようになります。
auto firstName = record.at("firstName").getValue();
auto lastName = record.at("lastName").getValue();
Whereは、純粋仮想メソッドを持つ をIRecord::at()
返します。およびのモック バージョンでコードをテストしようとしています。IColumn&
getValue()
Irecord
IColumn
auto mockRec = mocks.InterfaceMock<IRecord>();
auto mockCol = mocks.InterfaceMock<IColumn>();
私はうまく期待を設定することができfirstName
ます:
mocks.OnCall(mockRec, IRecord::at).With("firstName").Return(std::ref(*mockCol));
mocks.OnCall(mockCol, IColumn::getValue).Return(std::string("John")));
IColumn
しかし、次の期待のためにモックを再利用したいと思いlastName
ます。
mocks.OnCall(mockRec, IRecord::at).With("lastName").Return(std::ref(*mockCol));
mocks.OnCall(mockCol, IColumn::getValue).Return(std::string("Doe")));
しかし、これを実行すると、Hippo Mocks は両方のgetValue()
呼び出しに対して "John" を返します。
チュートリアルに従って、「firstName」と「lastName」の呼び出しの順序を制限しようとしました。
auto& firstCall = mocks.OnCall(mockRec, IRecord::at).With("firstName").Return(std::ref(*mockCol));
mocks.OnCall(mockCol, IColumn::getValue).After(firstCall).Return(std::string("John")));
auto& lastCall = mocks.OnCall(mockRec, IRecord::at).With("lastName").Return(std::ref(*mockCol));
mocks.OnCall(mockCol, IColumn::getValue).After(lastCall).Return(std::string("Doe")));
しかし、私はまだ両方のgetValue()
呼び出しで「ジョン」を受け取ります。
Q:インターフェイスを再利用して、IColumn
Hippo Mocks に必要な呼び出しごとに異なる値を返すように指示することはできますか? それとも、パラメーターごとgetValue()
に個別のモックを作成するのに行き詰まっていますか? IColumn
注: 私の実際の実装には 2 つ以上のパラメーターがあるため、IColumn
モックを再利用すると、各単体テストのセットアップが大幅に削減されます。