googlemockとgoogletestの助けを借りて、テスト対象のメソッドで異なる模擬エラーが正しく処理されているかどうかを確認するテストを設定します。基本的に私のコードは次のようになります。googlemock動作のばらつきが小さい場合は、
// setup mock object, and object under test
// setup initial EXPECT_CALL expectations
// this expected method call in the middle mocks a failure
EXPECT_CALL(*mock, method(arg_in)).
Times(1).
WillOnce(Throw(exception_of_type_A));
// setup cleanup EXPECT_CALL expectations
// Now invoke method in object under test.
// Expect exception has been translated to different type.
EXPECT_THROW(x.method_under_test(), exception_type_B);
// destructor of mock object will check the mock method invocations
今ここで失敗した私のモックメソッドが唯一のタイプAの例外をスローすることではなく、タイプBの例外をスローすることによって、または予期しない戻り値を返すことで失敗することはできません。
完全にTEST()をコピーして貼り付け、誤った虚偽のメソッド1が何をするかを変更するだけで、これを簡単に実装できます。しかし、これはコードを乱雑にするでしょう。私がこれらの3つのテストがまったく同じであることを文書化しても、WillOnce()アクション仕様で嘲笑されたメソッド1が失敗する方法を除いて、人間の読者はこれがまだ真実であるかどうか慎重に比較する必要があります。
googletest/googlemockで3つのTESTS間で共通コードを共有し、それらがWillOnce()アクションで異なるようにする正しい方法は何ですか?
マクロには、マクロ、WillOnce()アクション、googletestフィクスチャ、静的ヘルパーメソッドを使用してコンテナをループしてセットアップとクリーンアップを行います。
私はまだgoogletestには新しく、これに対処する方法が不明です。