62

私は会社で単体テストの取り組みを開拓しており、使用するモック フレームワークを選択する必要があります。私はこれまでモッキングフレームワークを使用したことがありません。すでに Google Test を選択しているので、Google Mock を使用するとよいでしょう。ただし、Google Mock のチュートリアルを見た後の私の第一印象は次のとおりです。

  • MOCK_METHODn マクロを使用してモック クラスの各メソッドを再宣言する必要はないように思われ、DRY 原則に反するようです。
  • それらのマッチャー (たとえば、EXPECT_CALL(turtle, Forward(_)); の「_」) とマッチングの順序は、ほとんど強力すぎるようです。たとえば、意味のないことを言うのは簡単で、そのようにしてバグを見逃してしまいます。

私は Google の開発者に大きな信頼を寄せていますが、モッキング フレームワークを判断する自分の能力には自信がありません。私の質問は次のとおりです。これらは有効な懸念事項ですか?

それとも、モック オブジェクトを定義するより良い方法はありませんか?マッチャーは実際に直感的に使用できますか? 以前に Google Mock を使用したことがある方からの回答をお待ちしております。他の C++ フレームワークとの比較も参考になります。

4

4 に答える 4

45

私は頻繁にそれを使用します。

比較的簡単なことを行うのは些細なことであり、非常に難しいことを行うことも可能です - それは私がフレームワークに望んでいることです。

Google のモックを使用してカスタム Matcher (およびその他のもの) を作成する際の最も難しい部分は、Google のモックではなく、C++ のテンプレート エラーです...解析がほぼ不可能です。私はしばしば、いくつかのそれほど複雑でない式から機能する式を段階的に構築することによって、複雑な式を作成します。そうすれば、テンプレートのエラーを特定しやすくなります。

私は C++ のモッキングのためのより良いオプションを見たことがなく、Google は多くの分野をカバーしているので、試してみることをお勧めします。

DRY の原則について言えば、嘲笑されたメソッドを宣言することは残念なことであることに同意しますが、反省がなければ、c++ がそうでなければうまくいくかどうかはわかりません。方法があれば、googlemockがそれを使用することはほぼ確実です;)

ところで: googlemock クックブックは参考になります。

于 2010-05-13T14:04:08.080 に答える
23

Fake-Itは、C++ 用のシンプルなモック フレームワークです。FakeIt は最新の C++11 機能を使用して、表現力豊かな (しかも非常にシンプルな) API を作成します。FakeIt を使用すると、メソッドを再宣言する必要も、モックごとに派生クラスを作成する必要もありません。Fake-It の方法は次のとおりです。

struct SomeInterface {
  virtual int foo(int) = 0;
};

// That's all you have to do to create a mock.
Mock<SomeInterface> mock; 

// Stub method mock.foo(any argument) to return 1.
When(Method(mock,foo)).Return(1);

// Fetch the SomeInterface instance from the mock.
SomeInterface &i = mock.get();

// Will print "1"
cout << i.foo(10);

探求すべき機能は他にもたくさんあります。さあ、試してみてください

于 2014-09-09T07:04:17.550 に答える
15

免責事項: 私は HippoMocks を書きました。

他のモッキング フレームワークを検討することをお勧めします。あなたが自分自身を繰り返させないそれらのクラスがあります。また、一致するための新しい構文を廃止して、コードを英語と組み合わせた C++ のように読みやすくします。試してみる!

http://www.assembla.com/wiki/show/hippomocks

于 2010-05-18T13:44:55.580 に答える