C ++/QtアプリケーションにGoogleTestとGoogleMockを使用しています。私がこれを試したちょうど今まで、私はこのセットアップで大きな成功を収めてきました:
QList<AbstractSurface::VertexRow> rowList;
for (unsigned i = 0; i < rows; ++i)
{
AbstractSurface::VertexRow curRow(new AbstractSurface::Vertex[cols]);
for (unsigned j = 0; j < cols; ++j)
{
curRow[j] = AbstractSurface::Vertex();
}
rowList.append(curRow);
}
ON_CALL(surface, numRows_impl()).WillByDefault(Return(rows));
ON_CALL(surface, numColumns_impl()).WillByDefault(Return(cols));
ON_CALL(surface, popAllRows_impl()).WillOnce(Return(rowList));
/* ... */
これをコンパイルしようとすると、gccから次のエラーメッセージが表示されます。
../../3DWaveSurface/test/TestWaterfallPresenter.cc: In member function ‘virtual void<unnamed>::WaterfallPresenterTest_CallingPaintGLCallsPaintRowForEachRowInSurface_Test::TestBody()’:
../../3DWaveSurface/test/TestWaterfallPresenter.cc:140:41: error: ‘class testing::internal::OnCallSpec<QList<boost::shared_array<AbstractSurface::Vertex> >()>’ has no member named ‘WillOnce’
それが役立つ場合は、VertexRow
はaのtypedef
でありboost::shared_array<Vertex>
、は有効な空のコンストラクターを持つです。Vertex
struct
QList
これは私がテストのために書いたもののエラーですか、それともまたはを使用することとの非互換性shared_array
ですか?
解決 策VJoの推奨事項に従った後、テストをコンパイルして実行しましたが、クラッシュしました。
Stack trace:
: Failure
Uninteresting mock function call - returning default value.
Function call: popAllRows_impl()
The mock function has no default action set, and its return type has no default value set.
The process "/home/corey/development/3DWaveSurface-build-desktop-debug/test/test" crashed.
のデフォルトの戻り値がなかったためですpopAllRows_impl()
。デフォルトを追加しました:
ON_CALL(surface, popAllRows_impl()).WillByDefault(Return(QList<AbstractSurface::VertexRow>()));
私にとって、SetUp()
そしてすべてが順調です。VJoが指摘したように、WillOnce()はありませんが、forON_CALL
がありEXPECT_CALL
、クックブックでこれを見逃しました。