問題タブ [googletest]
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.
visual-studio - アンマネージ C++ テスト フレームワークと Visual Studio 2008 の統合 (GUI テスト ランナー)
Visual Studio Unit Testing Framework で私が気に入っている点の 1 つは、クラス定義からテスト結果を示すグラフィカルな緑/赤のバーを持つテストの実行まで、すべての単体テストが IDE 内で行われることです。
CppUnit と Google Test の両方を使用してアプリケーションをテストしています。テキスト出力があれば、両方を Visual Studio IDE に統合することに成功しました。
DevStudio 内からテストを実行し、グラフィカルなテスト ランナーを使用してフィードバックを提供できるようにする Visual Studio アドインを構築する人がいるかどうか疑問に思っています。
ありがとう、
ニック
c - Google Test は C コードのテストに使用できますか?
そのため、私は自分が関与している C++ プロジェクトで Google Test を使用するのが好きになり、楽しんでいます。私は、純粋な C (ライブラリ) になる新しいプロジェクトを立ち上げているところですが、今のところ理由がわかりません。 C++ フレームワークであるにもかかわらず、Google Test を使い続けないでください。C++ コンパイラが利用可能であることは問題になりません。
ストレート C コードのテストに Google Test を使用してはいけない特定の理由はありますか?
ありがとう。
c++ - C++ のモック オブジェクトには常に仮想メソッドまたはテンプレートが必要ですか?
クラスがあるとします
適切な単体テストでは、 のテストが必要ですInner
。次に、完全なスタック/の代わりに追加された機能に対して単体テストを実行できるようにOuter
、実数ではなく を使用するInner
テストを行う必要があります。MockInner
Outer
Outer
Inner
そうするために、GoogletestInner
は次のような純粋な抽象クラス (インターフェース) に変えることを提案しているようです:
したがって、製品コードでは、Outer(new Inner)
;を使用します。テスト中に、Outer(new MockInner)
.
わかった。理論的にはいいように思えますが、コード全体でこのアイデアを使い始めたとき、私はすべての異常なクラスに対して純粋な抽象クラスを作成していることに気付きました。不要な仮想ディスパッチのために低下するわずかなランタイム パフォーマンスを無視できるとしても、定型的なタイピングがたくさんあります。
別のアプローチは、次のようにテンプレートを使用することです。
これにより、ボイラーメッキと不要な仮想ディスパッチが回避されます。しかし、今ではコードベース全体がおかしなヘッダー ファイルに含まれているため、ソースの実装を隠すことができません (イライラするテンプレート コンパイル エラーと長いビルド時間への対処は言うまでもありません)。
これらの 2 つの方法、バーチャルとテンプレートは、適切な単体テストを行う唯一の方法ですか? 適切な単体テストを行うためのより良い方法はありますか?
適切な単体テストとは、各単体テストがそのユニットによって導入された機能のみをテストし、ユニットの依存関係もテストしないことを意味します。
c++ - グーグルテストEXPECT_EQとboost::make_recursive_variant
私は以下のようなブースト再帰バリアントを持っています。assertを使用して2つの再帰バリアントオブジェクトを比較すると、正常に機能しますが、EXPECT_EQを使用すると、コンパイルエラーが発生します。
boost / v1.46.1 / include / boost / Variant / detail / Variant_io.hpp:64:エラー:'operator <<' in'((const boost :: detail :: Variant :: printer >> *)thisに一致しません)-> boost :: detail :: Variant :: printer >> ::out_<<オペランド'</p>
c++ - Google Test C ++:テストで現在のコンソール出力を読み取る方法はありますか?
次のメソッドを持つテスト対象のクラスがあると仮定します。
さて、私のグーグルテストの中で、この出力が行われたことを確認したいと思います。以下の擬似コードで使用されているlastConsoleOutputと同等のものは何でしょうか?
フィードバックありがとうございます!
c++ - boost::bind で Google Mock を使用する
コンストラクターが Boost 関数を受け取るクラスがあり、それを Google Mock でテストしたいと考えています。次のコードは、サンプル クラスとそれをテストする試みを示しています。
MyClass.h:
MyClassTest.cpp:
Visual Studio 2008 で MyClassTest.cpp をコンパイルしようとすると、次のエラーが発生します。
...gmock/gmock-generated-function-mockers.h(76): エラー C2248: 'testing::internal::FunctionMockerBase::FunctionMockerBase': クラス 'testing::internal::FunctionMockerBase' で宣言されたプライベート メンバーにアクセスできません1> with 1> [ 1>
F=void (void) 1> ] 1>
.../gmock-spec-builders.h(1656) : 「testing::internal::FunctionMockerBase::FunctionMockerBase」の宣言を参照 1 > with 1> [ 1>
F=void (void) 1> ] 1>
この診断は、コンパイラによって生成された関数 'testing::internal::FunctionMocker::FunctionMocker(const testing::internal::FunctionMocker &)' 1 で発生しました。 > with 1> [ 1>
Function=void (void) 1> ]
エラーは、boost::bind を含む行に起因します。モック化されたメソッドを void callback(){} に置き換えると、コンパイル エラーがなくなります (ただし、Google Mock の使用もなくなり、目的に反します)。テストされたクラスを変更せずに、私がやろうとしていることは可能ですか?
cmake - CTestを使用せずにCMakeを使用してテストを構築する
これが私がやりたいことです:
- 入力
make all
すると、ライブラリとそのドキュメントが作成されます。 - 入力
make test
すると、lib(必要な場合)、gtest、そしてテストがビルドされます - 入力
make check
はmake test
必要に応じて実行され、実行可能ファイルが実行されます
今のところ、私は最初に動作するようにできただけです。私が抱えている問題は、gtestの条件付きインクルードです。
GtestはCMakeを使用しています。理論的には、gtestディレクトリを含めるだけですadd_subdirectory
が、gtestは常にビルドされます。
現在の私の構造は次のとおりです。
-targetへの依存関係としてgtestを追加する方法を理解しようとしていますが、test
毎回gtestをビルドするわけではありません。
私は本当にイライラしていて、CMakeの学習に関する情報はほとんどないので、誰かが詳細なチュートリアル(インターネットで無料で入手可能)を知っていれば、それは素晴らしいことです。
c++ - Google Test でテストされた既存の C++ コードで作業し、Qt を追加する
Linux (Ubuntu) のいくつかの c++0x 機能を使用して、C++ で記述されたプログラムに取り組んでいます。Google Test でたくさんのテストを作成しました。依存関係を生成する g++ とプレーンなメイクファイルを使用しています。
今、私は完全に別の UI に取り組みたいと思っています。
私は Qt が良いと判断しましたが、構築するのはちょっと複雑であることがわかりました。一番簡単なのは qmake を使うことだと思います。
基になるすべてのクラスを Qt から独立させながら、Qt をアプリケーションに組み込む方法を考えていました。良いコードを書くことでそれを行う方法は理解していますが、良いビルド システムが必要です。
Qt の単体テスト フレームワークの使用に切り替えたくありません。Qt を UI に使用したいだけであり、テストを書き直す意味がわからないからです。
qmake を使用して変更し、Google テスト ランナーと Qt アプリを生成する必要がありますか? メイクファイルを保持し、qmake を使用して、元のメイクファイルで生成された .o ファイルに依存するコードの UI 部分のみをビルドおよびリンクする必要がありますか? 私は何か他のことをすべきですか?
最後に、上記のオプションをどのように実行しますか?
c++ - 派生クラスにスーパークラスのテストを適用する
B
classから派生した C++ クラスがあるとしますA
。class の機能を完全にサポートする必要があるためA
、 class のインスタンスに対しても実行したいclass に対して広範なテストが設定されています。もちろん、追加の特定のテストもあります。B
A
B
A
のすべての のテストを複製する必要がないように、テストをどのようにセットアップしますB
か?
Google Testの具体的な回答は素晴らしいでしょう。
googletest - GoogleTestでテストのサブセットをコンパイルする
フラグを使用してGoogleTestフレームワークで実行されるテストを制限することは素晴らしいことですが、私の場合、テストを書いている間、テストプロジェクト全体が何度もコンパイルされるのを待つことにほとんどの時間が無駄になります。
現在作業しているテストケースだけにコンパイルを制限する簡単な方法はありますか?
(VSからテストcppファイルとリソースcppファイルを削除することは常に代替手段ですが、それは多くの作業です...)