C ++ユニットテスト:スタブ(模擬ではありません)?
-
28-10-2019 - |
質問
C ++でユニットテストに入るだけです。私が進むにつれて、いくつかのスタブクラスを書く必要があるようです。私の理解は、模擬とスタブの間に違いがあることです。基本的に、モックはオブジェクトで何かが起こったとき(検証)をテストしているときに、スタブがテストを容易にするだけであるようです。 ock笑のために、Googlemockを使用することはできますが、スタブ(Ala RhinomocksのGenerateStub)を作成するために何も表示されません。
自動的に生成されたスタブを取得する方法はありますか? Googlemockにはスタブのサポートがありますか?または、テスト用のスタブを手動で作成する必要がありますか?
解決
パズルの不足している部分は、メソッドに期待を設定する必要がなく、代わりにデフォルトの返品値を設定できることだと思います。
模擬
のすべての議論と例Googleはダミーのための模擬「期待の設定に焦点を当てています。すべてが次のようなコードを使用することについて語っています。
EXPECT_CALL(turtle, PenDown())
.Times(AtLeast(1));
それはあなたがock笑するために望むものですが、スタブをするためにあなたは期待を持っていません。そのイントロを読んだ後、私はgooglemockをスタブに使用する方法がわかりませんでした。
スタブ
Ratkokのコメントは、デフォルトの返品値を設定する方法を見つけるようになりました。モックされたオブジェクトの返品値を指定する方法は次のとおりですが、期待はありません。
ON_CALL(foo, Sign(_))
.WillByDefault(Return(-1));
http://code.google.com/p/googlemock/wiki/cookbook#setting_the_default_actions_for_a_mock_method
Googlemockは、expect_callがないメソッドを呼び出すと警告を発しているようです。どうやらあなたは彼らを使用してこの警告を防ぐことができます Nicemock 構成またはあなたはそれを無視することができます。さらに、代わりに期待を使用して警告を回避できるように見えます(スタブの良いアイデアかどうかはわかりません)。から Google Mock FAQ:
EXPECT_CALL(foo, Bar(_))
.WillRepeatedly(...);
それはまさに私が理解しようとしていたものだと思います。
アップデート
これが機能することを確認できます。 Google TestとともにGoogleMockを使用してユニットテストを作成し、ON_CALLを使用してクラスの方法を突き出すことができました。