問題タブ [googlemock]
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++ - クラスに属さない関数に期待を設定するためにgooglemockを使用できますか?
私のメインに、メインから呼び出される関数 func がある場合、googlemock を使用して EXPECT_CALL( no_class_here , func).Times(1) と言うことができますか?
no_class_hereは、クラス ::. に属していないことを示すスコープ演算子のようなものです。それがどのように機能するかはわかりませんが、関数の実装では
func が単なる静的関数であり、実行するためにクラスを必要としない場合、クラス内に func を配置したくありません...
あきらめて、テストしようとしているすべてのものを常にクラスに入れる必要がありますか? JUnit と JMock はすべて Java のクラスなので仕方がないことはわかっていますが、仮想関数だけでクラスから派生する機能は、おそらく googlemock がその作業を行うためのメカニズムであると思います...
c++ - googlemock - 複雑なデータ型を返すメソッドをモックする
複雑なデータ型を返すメソッドをモックしたい
このコードはコンパイルされません: 「マクロ "MOCK_CONST_METHOD0" は 3 つの引数を渡しましたが、2 つしか取りません」
googlemock マクロは QMap を理解せず、コンマをパラメーター区切りとして解釈すると思います。
QMapが戻り値であることをgooglemockに伝える方法はありますか?
c++ - ライブラリ全体をモックする
を使用するコードを開発していますboost::asio
。テストするには、このライブラリから一連のクラスをモックする必要があります。仮想メソッドをモックできる Google Mock を使用しています。通常の (そして面倒な) プロセスは、使用する必要があるクラスごとにインターフェイスを作成することです。
一方、Google Mock Cookbook では、非仮想メソッドをモックする場合の代替手段として、テンプレートの使用について説明しています。私の場合の問題は、同時に複数のクラスをモックする必要がある可能性があることです (そのため、テンプレートを直接使用しても機能しません)。だから私は考えました: 2 レベルのテンプレートを使用しないのはなぜですか? 私は次の解決策を思いつきました:
次に、通常の使用法は次のようになります。
テストは次のようになりますが:
これは、モック化されたクラスに複雑なパラメーターを持つメソッド (モック化されていない可能性のある同じライブラリの他のクラスなど) がある場合に複雑になります。要約すると、スケールしないようです。この解決策についての考え、または問題への他のアプローチに関する提案はありますか?
c++ - GoogleMock が私の shared_ptr を漏らしているのはなぜですか?
私はテストに GoogleMock/GoogleTest を使用しています。マッチャーがパラメーターとしてモックへの shared_ptr を持ち、同じ shared_ptr で EXPECT が呼び出されると、奇妙な動作が見られます。問題のあるコード:
このテストを実行すると、
なぜこれが起こるのか考えていますか?私はむしろ使用する必要はありませんMock::AllowLeak
。
c++ - Googletest-DeathTestは、Q_ASSERTなどのQtアプリケーションからのアサーションをキャッチしません。
gtestを使用してアサーションをテストしたいと思います。メソッドは次のようになります。
そして、テストは次のようになります。
このテストは、Linuxのgccで正常に機能します。
ただし、WindowsでのVisualStudio2010でのこのテストには問題があります。
テストを実行すると、エラーウィンドウが開きます。アサーションの失敗を示しています。ウィンドウを閉じると、すべてのテストが終了します。テストの失敗はありません。
gtestsは、アサーションの失敗を引き起こす新しいプロセスを開始し、プロセスの出力を評価すると思います。これは機能し、テストに合格します。
ただし、Visual Studioが新しいプロセスが失敗したことに気付くと、エラーウィンドウが作成されます。
エラーウィンドウを抑制するにはどうすればよいですか?
c++ - shared_ptrでgooglemockEXPECT_CALLを使用していますか?
生のポインターで正常に機能するテストがありますが、で機能させるのに問題がありstd::shared_ptr
ます。クラスは次のようになります。
私のテストコードは次のようなものです。
このテストでservice_
は、はテストのスタックで作成されたモック/フェイクであり、アドレスをのコンストラクターに渡しますMyClass
。としてMyClass
取るように変更すると、私の新しいクラスは次のようになります。service
shared_ptr
私がテストで試しているのは次のとおりです。
ただし、これを行うと、テストは次のように失敗します。
一言で言えば、コンストラクターに渡すためにshared_ptr
to service_
(偽のオブジェクト)がMyClass
必要であり、関数の非ポインターが必要EXPECT_CALL
です。これを正しく機能させるにはどうすればよいですか?
アップデート
動的にSomeServiceFakeを割り当ててshared_ptrを取得し、で*演算子を使用しようとすると、service_
「さらに」取得されますが、次のエラーが発生します。
更新2
を使用しMock::AllowLeak(service_.get());
て、今のところこの問題を回避できます。うまくいけば、私は答えを得るでしょう。
c++ - 「traits」テンプレート パラメーターを使用するオブジェクトの単体テスト
Visual Studio 2008 C++03 プロジェクトで、静的メソッド (ポリシー ベースの設計、戦略パターン) を公開する特性テンプレート パラメーターを使用するクラスを単体テストしたいと考えています。Google Test と Google Mock フレームワークを使用しています。
例えば:
明らかに、このままでは機能しません。Google Mock は静的メソッドをモックできないため、テストで Mocked クラスのインスタンスを作成して、その動作と期待値を設定する必要があります。
では、Google Test / Google Mock を使用してテンプレート ポリシーを受け入れるクラスを単体テストする正しい方法は何ですか?
c++ - "gmock/gmock.h" を #include するとコンパイル エラーが発生する
googlemock をテストに統合しようとしています。私はすでに googletest でテストを正常にビルドして実行しており、現在はテストに gmock 機能を段階的に追加しようとしていますが、完全に理解できないコンパイル エラーが発生しました。
モック化されたクラスを使用または定義したり、gmock.h が提供するものを使用したりしようとしているわけではありません。私の(以前は働いていた)tests.cppファイルの一番上に、私は単に入力します
そして、コンパイルエラーが発生します:
gmock/gmock-matchers.h(2497): エラー C2059: 構文エラー: 'sizeof'
gmock/gmock-matchers.h(2505) : コンパイル中のクラス テンプレートのインスタンス化 'testing::internal::ElementsAreMatcherImpl' への参照を参照してください
gmock/gmock-matchers.h(2497): エラー C2059: 構文エラー: ')'
gmock/gmock-matchers.h(2497): エラー C2143: 構文エラー: '{' の前に ')' がありません
gmock/gmock-matchers.h(2497): エラー C4430: 型指定子がありません - int が想定されています。注: C++ は default-int をサポートしていません
gmock/gmock-matchers.h(2499): 警告 C4183: 'メッセージ': 戻り値の型がありません。'int' を返すメンバー関数と見なされます
Windows 7 で nmake/vc++ を使用してこれをコンパイルしていますが、テスト ファイルにコア gmock インクルード ファイルを追加するだけでこれらのコンパイル エラーが発生する理由がわかりません。誰もこの種のものを見たことがありますか?
c++ - 別のスレッドからのgooglemock呼び出しを期待する
グーグルモックオブジェクトを使用して(グーグル)テストケースを記述し、テストのクラスによって制御される別のスレッドからEXPECT_CALL()定義が呼び出されることを期待する最良の方法は何でしょうか?呼び出しシーケンスをトリガーした後にsleep()などを呼び出すだけでは、テストが不必要に遅くなり、タイミング条件に実際に到達しない可能性があるため、適切ではありません。しかし、テストケースを終了するには、モックメソッドが呼び出されるまで何とか待たなければなりません。アイデアは誰ですか?
状況を説明するためのコードを次に示します。
Bar.hpp(テスト中のクラス)
Bar.cpp(抜粋):
テストコード(抜粋、これまでのところFooInterfaceMockの定義に特別なことは何もありません):
sleep()なしのテスト結果:
sleep()を有効にしたテスト結果:
最良の場合、Barクラスをまったく変更せずにsleep()を避けたいと思います。
boost - Google モックは、std::vector の boost::variant でコンパイルされません
boost::variant を使用するインターフェイス クラスの Google Mock オブジェクトを作成しようとしています。
でコンパイルすると
g++ mytest.cpp -o mytest
私は得る
/usr/include/boost/variant/detail/variant_io.hpp:64: エラー: '((const boost::detail::variant::printer > >*)this)-> の 'operator<<' に一致しませんboost::detail::variant::printer > >::out_ <<オペランド'</p>
boost::variant は std::vector で動作しますか? boost::variant は、std:vector 以外の任意の型で動作するようです。なんで?
Boost バージョン - 1.45 g++ バージョン - 4.4.5