問題タブ [catch-unit-test]
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++ - Catch レポーターから printf メッセージを除外する方法
USB スティックを監視し、プラグイン/プラグアウト イベントをリッスンできるライブラリをテストしています。ターゲット システムはカスタム Linux バージョンを実行しており、このシステムではデバッグが面倒です
そのため、何が起こっているのかをすばやく分析するために、私はprintf
メッセージを頻繁に使用します。
ライブラリの単体テストのために、私はCatch
JUintレポーターを使用してテストレポートを生成し始めました。
問題:printf
分析のためにメッセージを挿入すると、xml
によって生成されたレポートに追加されCatch
ます。
私の質問printf
:メッセージと によって生成されたレポートを分離する方法はありますCatch
か?
ありがとう。
更新: ファイルへの書き込みを回避したいのは、エラーが発生し、ファイルが完全に書き込まれる前にプログラムがクラッシュしたときに問題が発生したためです。
c++ - mbed OS 5 プロジェクトでリンクされているファイルは何ですか?
mbed 5 で使用する外部ライブラリ (コンポーネント コントローラー) を作成しており、mbed リポジトリで利用できるようにする予定です。コードが正しく動作することを確認するテストを書きたいのですが、それらは単なる通常の単体テストであり、組み込みコントローラーで実行する必要はありません。テスト スイートにを提供するフレームワークとしてCatchを見ています。main
mbed
CLI または Eclipse CDT (エクスポートされたプロジェクトを使用) でプロジェクトをビルドすると、どの.cpp
ファイルが含まれ、どの.o
ファイルが埋め込みイメージにリンクされますか? イメージには、インクルードを介してファイルから取り込まれたコードのみが含まれていますか?それとも、表示されているすべてのファイル (テスト ケースを含む可能性があります)main.cpp
をコンパイルしてリンクしていますか? .cpp
後者の場合、組み込みの utest 機能と衝突しない、それらを除外するクリーンな方法はありますか?
c++ - 「API」プログラムで単体テストを実装する方法
「API」機能を実行する C++ プログラムで単体テスト (Catch を使用) を実装しています。これは、ユーザーが外部デバイスと対話するために使用できる public メソッドを持つ大きなクラスで構成されています。さらに、他の機能を提供する特別なプライベート「システム」メソッドがあります。このデバイスは、応答、独自の統計などを送信します。クラス全体を単体テストに正しく分割するにはどうすればよいですか? calcs のような単純なプログラムについては多くの情報がありますが、より狭いケースについて特別なことは何もありません。クラス全体をテストに追加して、1 つのテストごとに 1 つのメソッドのみを使用する必要がありますか?それとも、このクラスからメソッドのみをコピーして、定義済みの入力パラメーターを与える必要がありますか?
c++ - Visual C++ 2015 での Catch2 の使用
Catch フレームワークを使用してユニット テスト プロジェクトを作成しようとしていますが、リンク エラーが発生します。
次のようにプロジェクトを設定しました。
- ネイティブ ユニット テスト プロジェクトを作成する
- インクルード ディレクトリに Catch を追加します。
#include <catch.hpp>
stdafx.hに追加- 次の簡単なソース ファイルを記述します。
unittest.cpp:
c++ - 再定義された Catch 単体テスト
私は巨大なソフトウェアをテストしており、このタスクに Catch を使用したいと考えています。私は「シングル インクルード」バージョン 1.9 を使用しており、それを Visual Studio 2012 update 4 に統合し、C++04 標準を使用しています。
以下に示すように、3 つの「.cpp」ファイルを使用します。それらのそれぞれは、次を参照します。
- 「抽象化」マクロを提供するインクルード ファイル (例:
#define Assert(x) REQUIRE(x)
)。 - テスト用のユーティリティを提供するユーティリティ ファイル。
- 特定のテスト ターゲット インクルード ファイル。
- いくつかの「名前空間を使用する」ステートメント、同じ名前空間を「使用する」すべての cpp ファイル。
- マクロで書かれた実際のテスト (例:
Assert(2 == getNumber())
)。
ファイルの内容の詳細については、以下をご覧ください。
この構成は機能しますが、テスト ファイルの 1 つが日ごとに大きくなっており、3 つ以上に分割したいと考えています。さて、私が次のことをするとしましょう:
- テストの内容の一部を取り、
test.cpp
それを新しいファイルに移動しますtest2.cpp
。 - 同じインクルードと定義を追加してコンパイルします。
- メインに新しいファイルを含める
テストを実行すると、このエラーがポップアップします。
test2.cpp
新しいファイルはどこにありますか。コンテンツを元に戻すtest.cpp
とすべてうまくいきますが、数千行のテストを扱うのは、プロジェクト自体で作業するよりもほとんど難しく、次元はさらに 3、4 倍大きくなる可能性があります。テストを複数のファイルに分割する方法はありますか?
- ノート -
Catch をヘッダーにインクルードし、インクルード ヘッダーをcatch.cpp
直接ではなく使用することはお勧めできませんが、この構成を 3 つ (正確には 3 つ)のインクルード.cpp
テスト ファイルで使用することに成功しましたが、これを 4 つのファイルで使用することはできません。
コンポーネントが定義された行に何らかの関連があることを読んだことを覚えていますが、テストケースが別の行で定義され、動作が変わらないようにコードを移動することもできます。
また、コンパイラ/リンカーのキャッシュにダーティデータが保持されている可能性があるため、「クリーンアップと再構築」を試みましたが、役に立ちませんでした。
現在、実際の MWE を作成することはできませんでした。そのため、必要と思われる正確なテスト セットアップのスケッチを提供しました。追加の詳細を提供したり、実際の MWE を構築して共有したりできます。
どんなアイデアでも大歓迎です!
私の「作業」コードは次のようになります。
main.cpp
test1.cpp
unitTestSuite.h
ユーティリティ.h
「分割」後:
test1.cpp
test1.2.cpp
main.cpp
プログラム出力:
c++ - CMake を使用してテスト実行可能ファイルのカバレッジ フラグを無効にするクロスコンパイラの方法はありますか?
将来使用する予定の汎用 C++、CMake、およびCatchプロジェクト テンプレートを作成しており、コード カバレッジ レポートを有効にしたいと考えています。そのために、次の CMake モジュールをモジュールのリストに追加することにしました: CodeCoverage.cmake。これに対する私の使用法は、基本的に次のスニペットに要約されます。
詳細。
ENABLE_COVERAGE
lcov/gcov を使用して生成されるコード カバレッジを有効/無効にするために使用するコマンド ライン フラグです。
/li>tests
すべての単体テストを実行する実行可能ファイルの名前です。まずadd_subdirectory
、そのフォルダーを追加するために使用し、使用するフォルダー内で:
私の問題:
通常、make
スクリプトを実行すると、ビルドに約 10 秒かかるテスト実行可能ファイルを含め、コードは簡単にコンパイルされます。ただし、コードのカバレッジを有効にすると、コードがビルドmain.cpp.o
(内部tests
) でスタックし、make
終了しません。を実行するmake VERBOSE=1
と、上記のオブジェクトに対して実行されている次のコマンドが表示されます。
(読みやすくするために一部のパスを短縮しており、インデントされた行は同じコマンドの一部です)
どうやら、 を使用しても、set(COVERAGE_EXCLUDES 'tests/*')
コンパイラはテスト実行可能ファイルにカバレッジ フラグを追加しているようです。これがビルド時間の遅さの原因だと思います。私の結論が正しければ、これらのフラグをテスト実行可能ファイルに追加しないようにコンパイラに指示するにはどうすればよいでしょうか? 私の結論が正しくない場合、この実行可能ファイルのビルド時間を短縮するにはどうすればよいですか? (フラグ名については直接言及したくありません。すべてのコンパイラで機能するとは限らないためです (つまり、GCC/Clang を意味します))。
ちなみに、私のmain.cpp
内容は次のとおりです。
サンプル テスト ファイルには次のものが含まれます。