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

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

c++ - Catch レポーターから printf メッセージを除外する方法

USB スティックを監視し、プラグイン/プラグアウト イベントをリッスンできるライブラリをテストしています。ターゲット システムはカスタム Linux バージョンを実行しており、このシステムではデバッグが面倒です

そのため、何が起こっているのかをすばやく分析するために、私はprintfメッセージを頻繁に使用します。

ライブラリの単体テストのために、私はCatchJUintレポーターを使用してテストレポートを生成し始めました。

問題:printf分析のためにメッセージを挿入すると、xmlによって生成されたレポートに追加されCatchます。

私の質問printf:メッセージと によって生成されたレポートを分離する方法はありますCatchか?

ありがとう。

更新: ファイルへの書き込みを回避したいのは、エラーが発生し、ファイルが完全に書き込まれる前にプログラムがクラッシュしたときに問題が発生したためです。

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

c++ - mbed OS 5 プロジェクトでリンクされているファイルは何ですか?

mbed 5 で使用する外部ライブラリ (コンポーネント コントローラー) を作成しており、mbed リポジトリで利用できるようにする予定です。コードが正しく動作することを確認するテストを書きたいのですが、それらは単なる通常の単体テストであり、組み込みコントローラーで実行する必要はありません。テスト スイートにを提供するフレームワークとしてCatchを見ています。main

mbedCLI または Eclipse CDT (エクスポートされたプロジェクトを使用) でプロジェクトをビルドすると、どの.cppファイルが含まれ、どの.oファイルが埋め込みイメージにリンクされますか? イメージには、インクルードを介してファイルから取り込まれたコードのみが含まれていますか?それとも、表示されているすべてのファイル (テスト ケースを含む可能性があります)main.cppをコンパイルしてリンクしていますか? .cpp後者の場合、組み込みの utest 機能と衝突しない、それらを除外するクリーンな方法はありますか?

0 投票する
0 に答える
52 参照

c++ - 「API」プログラムで単体テストを実装する方法

「API」機能を実行する C++ プログラムで単体テスト (Catch を使用) を実装しています。これは、ユーザーが外部デバイスと対話するために使用できる public メソッドを持つ大きなクラスで構成されています。さらに、他の機能を提供する特別なプライベート「システム」メソッドがあります。このデバイスは、応答、独自の統計などを送信します。クラス全体を単体テストに正しく分割するにはどうすればよいですか? calcs のような単純なプログラムについては多くの情報がありますが、より狭いケースについて特別なことは何もありません。クラス全体をテストに追加して、1 つのテストごとに 1 つのメソッドのみを使用する必要がありますか?それとも、このクラスからメソッドのみをコピーして、定義済みの入力パラメーターを与える必要がありますか?

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

c++ - Visual C++ 2015 での Catch2 の使用

Catch フレームワークを使用してユニット テスト プロジェクトを作成しようとしていますが、リンク エラーが発生します。

次のようにプロジェクトを設定しました。

  1. ネイティブ ユニット テスト プロジェクトを作成する
  2. インクルード ディレクトリに Catch を追加します。
  3. #include <catch.hpp>stdafx.hに追加
  4. 次の簡単なソース ファイルを記述します。

unittest.cpp:

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

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

プログラム出力:

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

c++ - CMake を使用してテスト実行可能ファイルのカバレッジ フラグを無効にするクロスコンパイラの方法はありますか?

将来使用する予定の汎用 C++、CMake、およびCatchプロジェクト テンプレートを作成しており、コード カバレッジ レポートを有効にしたいと考えています。そのために、次の CMake モジュールをモジュールのリストに追加することにしました: CodeCoverage.cmake。これに対する私の使用法は、基本的に次のスニペットに要約されます。

詳細。

  • ENABLE_COVERAGElcov/gcov を使用して生成されるコード カバレッジを有効/無効にするために使用するコマンド ライン フラグです。
  • testsすべての単体テストを実行する実行可能ファイルの名前です。まずadd_subdirectory、そのフォルダーを追加するために使用し、使用するフォルダー内で:

    /li>

私の問題:

通常、makeスクリプトを実行すると、ビルドに約 10 秒かかるテスト実行可能ファイルを含め、コードは簡単にコンパイルされます。ただし、コードのカバレッジを有効にすると、コードがビルドmain.cpp.o(内部tests) でスタックし、make終了しません。を実行するmake VERBOSE=1と、上記のオブジェクトに対して実行されている次のコマンドが表示されます。

(読みやすくするために一部のパスを短縮しており、インデントされた行は同じコマンドの一部です)

どうやら、 を使用してもset(COVERAGE_EXCLUDES 'tests/*')コンパイラはテスト実行可能ファイルにカバレッジ フラグを追加しているようです。これがビルド時間の遅さの原因だと思います。私の結論が正しければ、これらのフラグをテスト実行可能ファイルに追加しないようにコンパイラに指示するにはどうすればよいでしょうか? 私の結論が正しくない場合、この実行可能ファイルのビルド時間を短縮するにはどうすればよいですか? (フラグ名については直接言及したくありません。すべてのコンパイラで機能するとは限らないためです (つまり、GCC/Clang を意味します))。

ちなみに、私のmain.cpp内容は次のとおりです。

サンプル テスト ファイルには次のものが含まれます。