問題タブ [ctest]
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.
command-line - 実行時に CTest でコマンドライン引数を渡す方法
私は CTest を使用しており、実行時にコマンドライン引数を基礎となるテストに渡したいと考えています。コマンド ライン引数を CMake/CTest スクリプトにハード コードする方法があることは知っていますが、実行時にコマンド ライン引数を指定し、それらの引数を CTest を介して基になるテストに渡したいと考えています。
これは可能ですか?
testing - CTest を使用して 2 つのファイルの違いを確認する方法は?
いくつかのレガシー ソフトウェア用の統合テストを作成しようとしています。テストを行う現在の方法は、既知の入力でコードを実行し、出力を既知の出力と手動で比較することです。
私はすでに CMake を使用しているので、このプロセスを自動化したいのですが、CTest でこれを行いたいと考えています。チェックする必要がある入力/出力が約 20 あります。
これを行う正しい方法は何ですか?CMake の経験は中程度で、CTest の経験はさらに少ないです。
c++ - 複数のビルドにわたる C++ のテストから測定された期間の Jenkins でプロットを表示する方法
ブースト タイマーを使用して計算の時間を実際に測定する複数のテスト ケースがあります。
テスト ケースは Boost Test を使用して定義されます。
テストの実行には CMake を使用しているため、CTest を使用します。テストはすべて add_test() で指定されます。CTest は XML ファイルを生成するので、対応する Jenkins ジョブで単体テストの結果を表示できます。
パフォーマンス テストでは、テスト ケースが成功したかどうかだけでなく、測定された期間も表示したいと考えています。
C++ (ブースト テスト/CMake を使用) で、測定された期間を何らかの方法でマークし、それらを 2 つの列を持つテスト ケースのペアを含むファイルに変換することは可能ですか?
次に、このファイルと、Jenkins の以前のビルドからのすべての同様のファイルをプロットとして表示したいと思います。ユーザーは、過去の複数のジョブの測定値を追跡して、パフォーマンスが向上したかどうかを確認できるはずです。
したがって、Jenkins はデータを次のようなファイルに変換する必要があります。
たぶん、私が知らない完全に異なるアプローチがあるでしょう。
unit-testing - CMake: 独自の CMake スクリプト マクロ/関数を単体テストする方法は?
標準の CMake コマンドの便利なラッパーをいくつか作成しました。この CMake スクリプト コードを単体テストして、その機能を確認したいと考えています。
私はある程度の進歩を遂げましたが、助けてもらいたいことが2つあります。
- 独自の CMake スクリプト コードを単体テストする「公式の」方法はありますか? CMake を実行するための特別なモードのようなものはありますか? 私の目標は「ホワイト ボックス テスト」です (可能な限り)。
- グローバル変数と変数スコープの問題を処理するにはどうすればよいですか? プロジェクトのキャッシュをロードしてグローバル変数をテストに挿入するか、テスト CMake ファイルを構成するか、-D コマンド ライン オプションを介してプッシュしますか? 変数スコープのシミュレーション/テスト (キャッシュされているものとキャッシュされていないもの、マクロ/関数/インクルード、参照によって渡されるパラメーター)?
まず、/Tests の下、特に Tests/CMakeTests の下にある CMake ソース コード (私は CMake バージョン 2.8.10 を使用しています) を調べました。膨大な数の種類があり、それらの多くは 1 つのテスト ケースに特化しているようです。
そのため、 CMake++などの利用可能な CMake スクリプト ライブラリも調べて解決策を確認しましたが、単体テストがある場合は、独自のライブラリ関数に大きく依存しています。
cmake - CMake - 実行可能ファイルを作成するが、「すべて」のターゲットに追加しない方法は?
CMake を使用して、一連の実行可能ファイルをビルドし、次のようにテストとして追加しました。
これで問題なく動作します。実行可能ファイルが作成され、テストが正しく追加されます。all
ただし、テスト実行可能ファイルをターゲットに追加したくありません。
テストを他のすべてのものと一緒にビルドするのではなく、テストを実行する直前にビルドしたいと思います。の一部として、make test
または一部としてctest
。
これどうやってするの?
c++ - CMake で予想されるビルド失敗テスト
特定のものがビルドに失敗していることを確認するとよい場合があります。たとえば、次のようになります。
これらのタイプのものを CMake/CTest に組み込むことは可能ですか? 私はでこのようなものを探していますCMakeLists.txt
:
(もちろん、私の知る限り、これらの特定の CMake ディレクティブは存在しません。)
c++ - std::cerr が std::cout を待機しない (CTest の実行時)
コンテキスト
ユーザー向けのメッセージを出力するロガーを作成しました。レベルが「debug」、「info」、または「warning」std::cout
のメッセージは に出力され、レベルが「error」または「system_error」のメッセージは に出力されstd::cerr
ます。私のプログラムはマルチスレッドではありません。Linux openSUSE 12.3 と gcc 4.7.2 および CMake 3.1.0 で作業しています。
私の問題
エラー メッセージ (に出力)std::cerr
が長い情報メッセージ ( に出力) の後に続き、出力がCTest によってstd::cout
ファイルにリダイレクトされるときに、エラー メッセージが情報メッセージに表示されることがあることがわかりました (以下の例を参照)。LastTest.log
私はこの動作をよく理解していませんが、書き込みスレッドが起動されstd::cout
、コードが続行され、最初の書き込みスレッドが終了するのを待たずに別の書き込みスレッドが起動されると思いstd::cerr
ます。
only を使用せずにそれを回避することは可能std::cout
ですか?
端末に問題はありません。これは、CTest が出力をLastTest.log
ファイルにリダイレクトする場合にのみ発生します。
私のバッファがフラッシュされていることに注意してください。std::endl
への呼び出しの後に来るのは問題ではありませんstd::cerr
。
例
予想される動作:
何が起こるのですか :
ロガーの呼び方
std::cout
これは、またはstd::cerr
ロガーを使用して呼び出す方法の例です。私はそのようなマクロでロガーを呼び出します:
と
ここで、ログ シャネルは端末出力専用のオブジェクトであり、書き込み関数は次のとおりです。
ログ命令が実行されると、バッファがフラッシュされることがわかります。
cmake - ctest --output-on-failure が機能しない
documentation によると、--output-on-failure
引数はctestに、失敗したときにテスト出力を表示するように指示します。2 番目のアプローチは、env var を設定することCTEST_OUTPUT_ON_FAILURE
です。どちらのオプションも機能しません。
appveyorでわかるように、いくつかのテストは失敗しますが、出力はありません。
GNU/Linux では、設定はCTEST_OUTPUT_ON_FAILURE
機能します。