問題タブ [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 - マッチャーと MFC\ATL CString
この質問は Google グループで行いましたが、こちらの方が回答が早いと思います。
Google のモッキング フレームワークを使用してコードをテストしようとしています。私も彼らのテストフレームワークを利用しています。私はVC9でコンパイルしています。MFC\ATL CString である引数の一致に問題があります。GMock は、オブジェクトが等しくないと言い、ポインター アドレスで評価しているように見えます。私がモックしようとしているメソッドは、次のように構成されています。
したがって:
私の期待を設定するとき、私は次の比較を行っています:
次のようなマッチャーのさまざまな組み合わせを試しました。
上記の呼び出しのいずれでも同じ結果が得られました。他の誰かがこの問題に遭遇しますか?
これは出力です:
Google Mock は次の 2 つの期待値を試しましたが、一致するものはありませんでした:
アダム
c++ - プロダクション コードを編集せずに C++ で非仮想メソッドをモックしますか?
私はかなり新しいソフトウェア開発者で、現在、数年前に開始された既存の C++ プロジェクトに単体テストを追加する作業を行っています。技術的な理由ではないため、既存のコードを変更することはできません。私のすべてのモジュールの基本クラスには、データの設定/取得、および他のモジュールとの通信のためのメソッドがたくさんあります。
個々のモジュールごとに単体テストを行いたいだけなので、すべてのモジュール間通信方法に既定の値を使用できるようにしたいと考えています。つまり、別のモジュールがアクティブかどうかをチェックする Ping() メソッドの場合、実行しているテストの種類に基づいて true または false を返すようにしたいと考えています。私は Google Test と Google Mock を調べてきましたが、非仮想メソッドのモックをサポートしています。ただし、説明されているアプローチ ( http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Nonvirtual_Methods ) では、元のメソッドを「テンプレート化」して、実際のオブジェクトまたはモック オブジェクトを取り込む必要があります。前述の要件により、基本クラスでメソッドをテンプレート化することができないため、これらの仮想メソッドをモックする別の方法が必要です
基本的に、モックしたいメソッドはいくつかの基本クラスにあり、単体テストしてモックを作成したいモジュールはその基本クラスの派生クラスです。ベース Module クラスとテストしたいモジュールの間に中間モジュールがあります。
アドバイスをいただければ幸いです。
ありがとう、
JW
編集:より具体的な例
私の基本クラスはrootModuleと言えます。テストしたいモジュールはleafModuleです。rootModule を継承する中間モジュールがあり、leafModule はこの中間モジュールを継承します。
私の leafModule では、rootModule クラスで定義された非仮想 GetStatus(moduleName) を呼び出す doStuff() メソッドをテストしたいと考えています。どういうわけか GetStatus() を作成して、選択した定型値を返す必要があります。モッキングは私にとって初めてのことですが、モックオブジェクトを使用することは正しいアプローチですか?
c++ - C++モック/テストboost::asio::io_streamベースの非同期ハンドラー
私は最近、何年にもわたるC#の後でC /C++に戻りました。それらの年の間に、私はモックとユニットテストの価値を見つけました。
C#でモックとユニットのテスト用のリソースを見つけるのは簡単です。WRTモッキング、C++ではそれほど多くありません。
Asynchio_serviceハンドラーをブーストでモックしてテストするために他の人が何をするかについてのガイダンスが欲しいです。
たとえば、C#では、MemoryStreamを使用してIO.Streamをモックし、これがここでたどるパスであると想定しています。
- C++モック/テストのベストプラクティス
- boost :: asio::io_serviceモック/テストのベストプラクティス
- C++非同期ハンドラーのモック/テストのベストプラクティス
私はgooglemockとgoogletestでプロセスを開始しました。
c++ - Google Mock は良いモッキング フレームワークですか?
私は会社で単体テストの取り組みを開拓しており、使用するモック フレームワークを選択する必要があります。私はこれまでモッキングフレームワークを使用したことがありません。すでに Google Test を選択しているので、Google Mock を使用するとよいでしょう。ただし、Google Mock のチュートリアルを見た後の私の第一印象は次のとおりです。
- MOCK_METHODn マクロを使用してモック クラスの各メソッドを再宣言する必要はないように思われ、DRY 原則に反するようです。
- それらのマッチャー (たとえば、EXPECT_CALL(turtle, Forward(_)); の「_」) とマッチングの順序は、ほとんど強力すぎるようです。たとえば、意味のないことを言うのは簡単で、そのようにしてバグを見逃してしまいます。
私は Google の開発者に大きな信頼を寄せていますが、モッキング フレームワークを判断する自分の能力には自信がありません。私の質問は次のとおりです。これらは有効な懸念事項ですか?
それとも、モック オブジェクトを定義するより良い方法はありませんか?マッチャーは実際に直感的に使用できますか? 以前に Google Mock を使用したことがある方からの回答をお待ちしております。他の C++ フレームワークとの比較も参考になります。
visual-studio-2010 - Visual Studio 2010 の GoogleMock と GoogleTest
Visual Studio 2010 で gmock と gtest のビルドに成功した人はいますか? バージョン 1.5.0 で試してみましたが、意味不明なコンパイル エラーしか出ません。
c++ - Google Mock を使用してテンプレート化されたメソッドをモックする方法は?
テンプレート化されたメソッドをモックしようとしています。
mock するメソッドを含むクラスは次のとおりです。
Google Mock を使用してメソッド myMethod をモックするにはどうすればよいですか?
c++ - シグネチャ`object()`で関数をモックする方法
宣言を使ってメソッドをモックしたいA::B X(void)
。定義は次のとおりです。
これに続く私の模擬クラスは、かなり標準的です。
コンパイルされましたが、これは私にこの奇妙なエラーを与え、私はそれを追跡することができませんでした。これの何が問題になっていますか?
更新これを実証するために失敗したコードサンプルを見つけました。
c++ - Google Mock: オーバーロードされた関数をモックすると警告 C4373 が作成される
Google Mockと VS2010を使用して、2 つのオーバーロードされた関数を持つ C++ クラスをモックしています。
コンパイルするたびに、次の警告が 2 回表示されます。
理由はありますか?
これは正しい動作ですか?
どうすればこれを回避できますか?
c++ - GMockを使用してデストラクタ呼び出しを確認する
GMockを使用して、クラスのデストラクタが呼び出されていることを確認するにはどうすればよいですか?別のクラスでラップする以外の方法はありますか?
明らかなメソッドEXPECT_CALL(object, ~classtype())
は、コンパイラエラーを生成します(gmockはと呼ばれるモックメソッドを生成できませんgmock_~classtype
)。
c++ - throw() 指定子を使用したメソッドのモック
throw() 指定子を持つ仮想メソッドを Google でモックしようとしています。元の関数は次のようになります。
コンパイラ エラーが発生します。looser throw specifier for 'virtual FunctionSignature'
これまでに試したコードは次のとおりです。
思いつく限りのあらゆる組み合わせを試しましたが、これらが最も論理的と思われるものです。throw() 指定子を使用して Google がメソッドをモックするにはどうすればよいですか?