問題タブ [hippomocks]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - HippoMocks:非仮想メソッドをモックすることは可能ですか?
単体テストの作成に HippoMocks を使い始めました。非仮想クラス メソッドをモックできるかどうか知りたいですか?
コードを最初に見ると、フレームワークが仮想メソッドのみをサポートしていることがわかります。しかし、単純な C 関数のモックをサポートしているため、非仮想クラス メソッドに対しても同じことができるはずです。
それを達成する方法はありますか?
c++ - Hippomocks - 可変数の引数を持つ関数のモック
ヒッポモックには、オーバーロードされた関数呼び出しをモックするための OnCallFuncOverload マクロがあります。引数の変数カウントを使用して関数をモックするために使用しようとしています。引数の変数カウントを持つオーバーロードされた関数の例を誰か教えてください。
私のコード
私はこのコードを試しています
コンパイラ出力:
c++ - Hippomocks は、異なるソース ファイルで同じ MockRepository に期待値を設定できますか?
複数のファイル内の複数のテストで、各テストに同じ期待値を設定する別のファイルから個別にコンパイルされたユーティリティ メソッドを呼び出せるようにしたいと考えています。ただし、Hippomocks では、異なるソース ファイルで同じ MockRepository に対する期待値を設定することに問題があるようです。
簡単な例を次に示します。
file1.cpp は次のとおりです。
file2.cpp は次のとおりです。
行 A と行 B を入れ替えると、Method45 呼び出しは 9999 を返します。 Method45 呼び出しが行われると、一致する期待値の検索で、file1 から正しいモック関数が見つかる前に、file2 で最初のモック関数が見つかることがわかります。
MockRepository には 4 つのモック メソッドがありますが、ヒッポモックはfuncIndex
ソース ファイルごとに値を割り当てます。これは、__COUNTER__
プリプロセッサ変数 (各ソース ファイルで 0 から始まり、その中で使用されるたびに 1 ずつ増加する変数) を使用するためです。ソース ファイル) を RegisterExpect の呼び出しで使用します。したがって、個別のソース ファイル内の後続の各期待値設定は、そのインデックスで設定された以前の期待値をすべて「隠します」。
個別にコンパイルされた各ソース ファイルに期待値を設定するすべてのユーティリティ関数をインライン コードとして含める必要があるようですが、これは優れたソリューションではありません。これを行う他の方法はありますか?
c++ - HippoMocks - 同じ関数に対して "NeverCallFunc" の後に "ExpectCallFunc" を使用すると、予期しない "HippoMocks::ExpectationException" が発生する
someFunc
関数が呼び出されないことが予想されるコードのシーケンスを最初に実行し、次にその関数が 1 回だけ呼び出されることが予想されるコードのシーケンスを実行する単体テストがあるとします。HippoMocksを使用すると、次のように記述できます。
ただし、上記のスニペットを Windows (Cygwin ツールチェーンでコンパイル) で実行すると、次のようHippoMocks::ExpectationException
にスローされます。
だから私は疑問に思っています...
... (1)、HippoMocks がそのようなシナリオを処理するように設計されていない場合。それsomeFunc
が呼び出されることを期待する (33 行目) は、対応するモック リポジトリの以前の期待を置き換えませんか?
... (2)、2 番目の期待値 (33 行目) がsomeFunc
明示的に呼び出されたときに満たされなかった理由。もしあれば、最初の期待 (27 行目) が満たされないことを期待していたでしょうか?
興味深いことに、物事は逆に機能します。次のスニペットは問題なく実行されます。
さらに、someFunc
(コメントに示されているように) 2 番目のスニペットの 2 番目の期待値の後ろに への呼び出しが挿入されている場合、これは検出され、HippoMocks による「呼び出しを行わない」という期待に対する違反として報告されます。
HippoMocks の専門家の助けをいただければ幸いです...
multithreading - HippoMocks はスレッドセーフですか?
HippoMocks は、次のように並行テストケース内で使用できますか?
同期起動フェーズ
- モックを作成する
- 期待などを登録します。
並行テスト段階
- モックでメソッドを呼び出す
同期分解フェーズ
- モックを検証する
この問題に関する明確な声明は見つかりませんでした。あちこちで、非仮想メソッドをモックするとスレッドセーフの可能性が失われることが言及されています ( HippoMocks: 非仮想メソッドをモックすることは可能ですか? ) またはスレッドセーフは非常に簡単に追加できます (残念ながら実際に明らかにすることなく) 。どうやって)。GoogleMock はこの質問に非常に明確に答えます ( https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#using-google-mock-and-threads )。そのような情報はここで役立ちます。それも。
c++11 - C++11 の HippoMocks メンバーを持つ gtest 派生クラスのスロー指定子が緩いコンパイル エラー
C++ 11 を使用した testing::Test of google テストから派生したテスト ケースをコンパイルしているときに、以下のエラーが発生します。派生クラスに HippoMock::MockRepository メンバーがある場合、以下のエラーがスローされます。
virtual MyTestClass::~MyTestClass noexcept(false) のスロー指定子が緩い 'virtual testing::Test::~Test() noexcept(true)' を上書きするエラー
HippoMock::MockRespository デストラクタが例外をスローし、noexcept(false) として定義されているため、このエラーが報告されていますが、Google テスト デストラクタは 'virtual testing::Test::~Test()' として定義されています
解像度:
- すべての派生デストラクタを noexcept(false) としてマークします。ただし、HippoMock::MockRepository がデストラクタから例外をスローするため、これは実現可能ではなく、クラッシュを引き起こす可能性があります。
- Google テストの testing::Test::~Test() noexcept(false) を宣言します。しかし、私は本当に結果を知りません.また、Google Mockを使用した新しいコード.
レガシー コードには多数の HippoMocks コードが含まれているため、すべてを Google Mock に置き換えることは現実的ではないことに注意してください。また、新しいコードは google モックを使用しています。
gtest testing::Test::~Test() noexcept(false) を定義するとどうなりますか?
c++ - 部分クラスのモッキング
クラスのメソッドをモックするためにヒッポモックを使用したいと考えています。そのメソッドは、同じクラスの別のメソッドによって呼び出されます。のように...
クラスのモッキングをテストします()...
「HippoMocks::NotImplementedException」のインスタンスをスローした後に呼び出された終了 what(): 予期せずに呼び出された関数!
このようなメソッドをモックできない理由は何ですか?
http://hippomocks.com/Main_Pageの例は私のものとほとんど同じに見えるので、これはサポートされるべきだと思いますか?
ありがとう、G
c++ - Hippomocks: 属性はポインターではなく値です
Hippomocks と C++ は初めてです。例外がキャッチされる Unittest を作成しようとしています。このために、次のテストを作成しました。
test()
正しく動作します。これはhttps://app.assembla.com/wiki/show/hippomocks/Tutorial_3_0で見つけた例です。
しかし、実行してtest_a()
も例外はスローされず、次のようになります。
Foo1 と Foo2 の違いは、Foo1 では属性 bar がポインターであり、Foo2 では値であることです。私の質問は次のとおりです。
- 異なる動作があるのはなぜですか?
memcpy(&g->bar, b, sizeof(*b))
というか、モック オブジェクト bを設定したのに、なぜ例外がスローされない のでしょうか。 - クラスを変更せずに修正するにはどうすればよいですか?
御時間ありがとうございます!