Google テストを作成しました (Google Mock を使用)。関連するコードは次のとおりです。
MockObj * obj = new MockObj ();
MockDI * mock_di = new DI();
MockDIPtr mock_di_ptr(mock_di); // boost shared ptr
Data data; // sort of on array
data.append(1); data.append(2); // Add two entries
EXPECT_CALL(*obj, get_di_ptr()).WillOnce(Return(mock_di_ptr));
EXPECT_CALL(*mock_di_ptr, get_data(_,_)).WillOnce(SetArgReferee<1>(data));
EXPECT_CALL(*obj , enqueue(_)).Times(2);
実際の実装は次のとおりです。
di_ptr->get_data(int, data); // data is updated via reference
for (int i = 0; i < data.size(); ++i)
{
enqueue(data[i]);
}
基本的に、enqueue()
データのエントリごとに 1 回呼び出す必要があります。また、モックは通常のモックです (Strict などではありません)。
このテストは、予想どおり、 をチェックすると合格しTimes(2)
ます。
このテストは、予想どおり、Times(0)
またはをチェックすると失敗しますTimes(1)
。
しかし、私がチェックすると、このテストは合格ですTimes(3)
!
なんで?その動作を検出するにはどうすればよいですか?