1

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>、は有効な空のコンストラクターを持つです。Vertexstruct

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、クックブックでこれを見逃しました。

4

1 に答える 1

2

最も簡単な解決策は次のとおりです。

EXPECT_CALL(surface, popAllRows_impl()).WillOnce(Return(rowList));

編集 :

ON_CALLありますWillByDefaultが、WillOnceメソッドはありません。gmockクックブックを確認してください

于 2011-09-26T19:29:19.417 に答える