問題タブ [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.

0 投票する
1 に答える
362 参照

c++ - boost::shared_array の期待値を設定する方法

いくつかのクラスの単体テストを書いています。これらのクラスは、別のクラスを使用comms_clientしてネットワーク通信を実行します。たとえば、パラメータとして a を受け取るメソッドをcomms_client提供します:sendboost::shared_array

クラスが何を送信しているかをテストするために、送信されている配列の内容が正しいかどうかを確認できるモック クラスを作成したいと考えています。モッククラスは次のようになります

残念ながら、そのようなタイプのパラメーターに期待値を設定する方法が見つかりませんでした。を使用してみましたtesting::ElementsAreArrayが、コンパイル エラーが発生します。そのような型のパラメータに期待値を設定するために使用できる関数はありますか? gmock ライブラリにカスタムの述語またはクラスを提供して、期待されるパラメータと実際のパラメータを比較できますか?

0 投票する
1 に答える
13592 参照

c++ - Google テストの戻り値

プロジェクトの単体テストに Google Test と Google Mock フレームワークを使用しています。さまざまな単体テスト プロジェクトがあり、ビルドを自動化してすべてを実行したいと考えています。

単体テストの実行可能ファイルが成功すると 0 を返し、テストが失敗すると 1 (またはその他の値) を返すことを期待していましたが、すべてのテストに合格すると 1 が返されます。GMOCK 警告がいくつか表示されますが、戻り値に影響する警告に関するドキュメントが見つかりませんでした。

テスト フィルタリングを実行して、GMOCK 警告がトリガーされず、戻り値として 1 を取得するテスト ケースを 1 つだけ実行しようとしました。

いくつかの DISABLED テスト ケースがあったので、それらをコメント アウトしました。戻り値としてまだ1を取得しています。

マクロのドキュメントとコード コメントによるとRUN_ALL_TESTS、戻り値は 0 である必要があります。

戻り値 1 の原因は他に考えられません。何か足りないものはありますか?

0 投票する
1 に答える
6923 参照

c++ - GoogleMockでインスタンス変数としてNiceMockを使用する

メソッドの戻り値をNiceMockに割り当てたい。NiceMockはインスタンス変数です。

固定方法は次のとおりです。

コンパイラは次のエラーをスローします。

フィクスチャメソッドの戻り値をインスタンス変数に割り当てるにはどうすればよいですか?

0 投票する
3 に答える
4025 参照

c++ - Google Mocks を使用して無料の関数をモックする

次の無料関数 sig があります。

このような関数のアドレスを、これらのハンドルを反復処理する反復子のコンストラクターに渡す必要があります。この関数の具体的な実装は外部の依存関係にアクセスするため、それをモックする必要があります。

Google モックを使用してこの関数をモックしたいのですが、方法がわかりません。

これは私が試したものです:

そして、このようなもの:

しかし、これはコンパイルされず、エラーが発生します:

'MockAttributeIterator::getAttribute': 関数呼び出しに引数リストがありません。「&MockAttributeIterator::getAttribute」を使用して、メンバーへのポインターを作成します

これを行う方法について何か提案はありますか?

0 投票する
1 に答える
702 参照

c++ - 単体テスト時の反復子の操作

私は、次の構造を使用する ac api に依存しています (関数名は単なる例です)。

そこで、まず getRoot を呼び出してルートのフォルダー ハンドルを取得します。ルート フォドラーの最初のファイルのハンドルを取得するために、フォルダー ハンドルを渡して getFile() を呼び出します。このレベルで 2 番目以降のファイルを取得するには、getNextFile を呼び出して、前のファイル ハンドルを渡します。

これを、次のように一連の C++ インターフェイスの形式でラップしました。

単体テストでは、IEntry、IFolder、IFile などの Google Mock 実装を使用するだけでよく、これは非常に便利です。また、インターフェイスは c API からの関数を理解しやすく操作しやすい方法で整理します。特定のインターフェイスの実装は、関連付けられたハンドルをラップします。

イテレーターを使用して、getFile や getNextFile などの関数呼び出しを結び付けます。この場合は、フォルダー内のファイルを反復処理します。API にはこのような関数のペアが多数あるため、Iterator というテンプレート クラスを使用して C++ スタイルの反復子を作成します。

私は実際には、通常のポインターではなく、std::shared_ptrs を使用しています。

単体テストの例を次に示します。

ただし、イテレータの使用に関しては、さらに複雑になります。この場合に私が使用しているアプローチは次のとおりです。

テストはelse句をテストしています。残りのコード (1 つのファイルと複数のファイル) をテストする別の 2 つのテストがあります。

関数 loadFileIteratorWithZeroItems は、反復子の内部を操作して、ゼロ項目を反復するようにします。loadFileIteratorEnd は、filesEnd() からの戻り値を設定します。これが loadFileIteratorWithZeroItems です:

ファクトリは、イテレータが指しているアイテムを作成するために使用されます。これは、単体テストの場合のモック バージョンです。内部反復子は、関数 getFile() と getNextFile() のラッパーであり、インターフェイス getFirst() と getNext() を持つすべてのペアです。

loadFileIteratorWithOneItem と loadFileIteratorWithTwoItems という関数もあります。

上記の関数 b をテストするより良い方法を提案できる人はいますか?

私のデザインは根本的に剥がれていますか?イテレータの実装に問題がありますか?

0 投票する
4 に答える
2364 参照

c++ - GoogleMock はより詳細なデバッグ情報を表示します

仕事でgooglemockを使用しています。EXPECT_THROW、EXPECT_NO_THROWなどをよく使用します...

私の質問は、関数が EXPECT_NO_THROW でラップされているが、実際には例外 (つまり、コードのバグ) をスローするときに、googlemock に例外の詳細とおそらくスタック トレースを出力させるにはどうすればよいですか?

私が得た唯一の出力は、例外をスローしてテストに失敗したことです...これは、根本原因のデバッグには役立ちません。

0 投票する
2 に答える
2511 参照

c++ - std::shared_ptr による循環参照の検出

私は依存性注入 (テスト駆動開発) の目的で多くのインターフェイスを使用しています。このため、多くのオブジェクトは std::shared_ptr を介してポイントされます。私は std::unique_ptr を使用していたでしょうが、Google のモック時に必要なコピー コンストラクターがありません。

循環参照が発生した場合に早期に検出するために、どのような対策を講じることができますか?

私はグーグルテストでLinuxプラットフォームに取り組んでいます。

0 投票する
1 に答える
2172 参照

c++ - Googleモック:このコードをテストする方法は?

Google Mockを使用してモックを作成してテストXyz::xyz_funcするために、次のコードを作成しました。Abc::abc_func

しかし、私は以下のエラーを受け取ります。実際の実装ではなく、abc_funcのモックを呼び出すようにXyzクラスに指示する方法を知りたいです。手伝っていただけませんか。

0 投票する
3 に答える
7734 参照

c++ - Boost ::SharedPointersと一緒にGoogleMockを使用したときにリークされたモックオブジェクト

この特別なシナリオでは、リークを取り除くことができません。

テストを実行すると、リークされたモックオブジェクトのメッセージが表示されます。具体的なメッセージ:

ClassElementFixture.h:102:エラー:このモックオブジェクト(テストClassElementFixture.initializeで使用)は削除する必要がありますが、削除しないでください。そのアドレスは@0x940a650です。

エラーが参照している行にマークを付けました。ここに私のコードの簡略化されたバージョンがあります:

GoogleMockがshared_ptrをリークしているのはなぜですか

関連するStack-Overflowで。しかし、そこからの提案は私の問題を解決しません:X

少なくともエラーを抑制するために私が見つけた唯一の可能性は次のとおりです。

ただし、これは非常にクリーンなソリューションではありません=)

では、リークを適切に取り除く方法は?

0 投票する
1 に答える
19899 参照

c++ - コンテナーを GoogleTest と比較する

2 つのベクトルを比較する googletest テストを実行しようとしています。このために、Google モックとマッチャーを使用していますが、「ContainerEq 識別子が見つかりません」という C3861 エラーと、「testing::AssertionResult に適切なデフォルト コンストラクターがありません」という C2512 が表示されます。なんで?