私は会社で単体テストの先駆者であり、使用するモックフレームワークを選択する必要があります。モックフレームワークを使用したことはありません。既にGoogle Testを選択しているので、Google Mockを使用するのがいいでしょう。ただし、 Google Mockのチュートリアル を見た後の私の最初の印象は次のとおりです。
私はグーグルの開発者に高い自信を持っています。また、モックフレームワークを判断する自分自身の能力には自信がありません。だから私の質問は:これらの有効な懸念はありますか?
それとも、モックオブジェクトを定義するより良い方法はありませんか?実際にマッチャーは直感的に使用できますか?以前にGoogle Mockを使用したことがある人からの回答をいただければ幸いです。他のC++フレームワークとの比較が役立つでしょう。
頻繁に使用します。
比較的簡単なことをするのは簡単ですが、非常に難しいことをすることは可能です-それはフレームワークに欲しいものです。
Googleのモックを使用してカスタムマッチャー(およびその他のもの)を作成することの最も難しい部分は、Googleのモックではなく、C++のテンプレートエラーです...解析するのはほぼ不可能です。私は、いくつかのそれほど複雑でない式から作業式を段階的に構築して、複雑な式を書くことがよくあります。そうすれば、テンプレートエラーを簡単に特定できます。
私はC++のモックを作成するためのより良いオプションを見たことはありませんし、Googleの多くの領域をカバーしているので、試してみることをお勧めします。
WRT the DRY原則、モックされたメソッドを宣言することは残念ですが、反省することなく、c ++がそれ以外に幸運があるかどうかはわかりません。 、googlemockはそれを使用します;)
ところで: googlemock cookbook は良いリファレンスです。
Fake-It は、C++用のシンプルなモックフレームワークです。 FakeItは最新のC++ 11機能を使用して、表現力豊かな(非常にシンプルな)APIを作成します。 FakeItでは、メソッドを再宣言したり、各モックの派生クラスを作成したりする必要はありません。偽造方法は次のとおりです。
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);
さらに多くの機能を探索する必要があります。先に進み、 試してみてください 。
免責事項:HippoMocksを書きました。
他のモックフレームワークを見ることをお勧めします。自分自身を繰り返さないクラスがあります。また、一致するための新しい構文を廃止して、コードを英語と組み合わせたC++のように読みやすくします。試してみる!
私はgoogletest + googlemockを数年間専門的に使用していますが、間違いなく気に入っています。他の人から言及されていないことの1つは、googletestの使用に既にコミットしている場合は、googlemockも使用することは理にかなっているということです。それらはかなりよく統合されており、似たようなデザインスタイルと哲学を共有しています。それがニースです。
たとえば、googlemockはASSERT_THAT()
マクロを提供します。これは非常に便利で、googletestsのアサーションとうまく共存します。
ただし、googlemockのパワーを乱用することについては警告します。 extremely非常に複雑で強力なマッチャーを作成して、まったく読めないようにしたい場合があります。あなたはそれを使用するときに規律する必要があります。
他の考え: