問題タブ [cpputest]
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 - C 単体テストの一般的な方法
たとえば、私の製品コード(実行可能ファイルにビルドするとします)には
単体テストには CppUTest を使用しています。A の実際のコードで B をテストすると、
- A の実際の実装が必要です。
- func_a() からすべての異なる可能な出力を生成できない場合があります。
- func_a() が他のモジュールの関数を呼び出す場合、関数呼び出しチェーンの奥深くにあるすべてのケースを検出/セットアップするのは困難です。
- おそらくこれは極端すぎるかもしれませんが、このアプローチがすべてのコードを一緒にリンクしてmain()から単にテストすることとどのように異なるかを人々に納得させることはできませんか?
しかし、B のテスト中に func_a() をモックすると、実際の実装がリンクされるため、A のテストを開始するとリンカーは複数の定義に文句を言います。この問題については、2 つの回避策があります
- file_a.c と file_b.c ごとに個別のテスト実行可能ファイルを作成します。しかし、これにより、生産が拡大するにつれて非常に多くの実行可能ファイルが生成され、「実際の」テストと「モック」の組み合わせテストが必要な場合は複雑になります。
- 本番コードを共有ライブラリとしてコンパイルし、それをテスト実行可能ファイルにリンクしてから、リンク時のインターポーズを使用して、実際の実装に対する関数呼び出しをインターセプトします。
では、そのようなシナリオの一般的な方法は何ですか? これは、c コードの単体テストでは非常に一般的なシナリオだと思います。
ありがとう、
html - ソース ファイルが他のディレクトリの相対位置にある場合、gcovr は詳細なレポートを作成しません。
ソースファイルがルートディレクトリからの相対位置にあるときに、gcovr から適切な html 出力を取得しようとしています。
例 (gcovr が機能する場合と問題がある場合の 2 つのケースについて説明します):
ケース:1 - gcovr は問題なく動作 します。 --html --html-details を使用してルートから gcovr を実行すると、ルート ディレクトリは次のようになります。
これですべて問題なく、html の一般レポート (report.html) と詳細レポート (report_myfile.html) ができました。
ケース:2 - gcovr が正常に動作しない --html --html-details を使用してルートから gcovr を実行すると、ルート ディレクトリは次のようになります)
ご覧のとおり、gcovr は gcovr_report/ ディレクトリ内に「report.C」ファイルを生成します。
また、概要を含む一般的な html レポート (report.html) が作成されますが、ソース ファイル "myfile.c" の詳細なレポートは作成されません。obj ディレクトリを調べると、次のファイルが作成されます (以下を参照)。
調べてみると
パスは次のように解決されます。
ただし、次のようにする必要があります。
gcovr コマンドは次のとおりです。
私が間違っていることは何か分かりますか?
ubuntu - Ubuntu 14.04 cpputest の例のビルドが失敗する
次の方法で、Ubuntuにcpputestをインストールしました。
今、本から例を構築しようとしていますが、失敗します:
apt-get が cputest をインストールした場所が見つからないようです。
どうすればそれを理解し、そこに向けることができますか?
c++ - 2 つのベクトルが等しいかどうかのチェック
私は2つのベクトルを持っています:
これらのベクトルが等しいかどうかを確認するためにcputestを使用しています。
これは機能しています。ただ、やはりdoublesを比較しているので、ある程度の許容範囲を使用すべきではないかどうか疑問に思っています。