問題タブ [cmocka]
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 - 構文の単体テストが機能しない
unitest を実行するために cmocka を学習しようとしています。インターネットでさまざまな例を見た後、単体テストをどのように行うべきかについて混乱しています。具体的には、次の構文を理解できません。
void ** 状態が使用されている理由と、それが何を意味するのか理解できません。循環バッファがいっぱいかどうかを確認するために単体テストを行っていますが、どのようにすればよいですか? これまで、c mocka のユニテストを次のように書いてきました。
c - テスト対象の非静的関数によって呼び出されるモック/ラップ静的関数
cmocka フレームワークで単体テストを実装して、いくつかの機能をテストしたいと考えています。
たとえば、2 つの静的関数を呼び出すテスト対象の非静的関数があります。これらの静的関数はハードウェアと対話するという事実のため、テスト時にそれらをモック/ラップし、実際の関数の代わりにラップ関数を使用したいと考えています。
cmocka のドキュメントで説明されているように、テストをビルド/リンクするときに --wrap=myfunction リンカー フラグを使用しました。
テストはコンパイルされますが、実行すると、ラップの代わりに実際の静的関数が呼び出されます。
静的関数を非静的と宣言すると、どちらも機能せず、実際の関数も呼び出されます。私が見つけた唯一の解決策は、追加の .c ファイルで関数を外部委託することです...しかし、コードを非常に操作するため、これは非常に悪い回避策です。
c - 複数の cmocka 単体テストで割り当てられたメモリ
cmocka を使用して一部のソース コードを単体テストしようとしています。基本的に、(関連する) ソース コードは Source.c に似ています。
単体テストは、各関数を個別に呼び出します。Add()関数をテストするとき、この関数は最終的にutil_malloc()を呼び出します(この関数は通常、malloc の前に 0 のサイズをチェックします)。これは単体テストによってラップされます。ラップされた関数__wrap_util_malloc()では、Wrappers.c で、最初に期待されるサイズがチェックされ、その後 malloc を使用してメモリが割り当てられます。
次に、Remove()関数がテストされ、以前に割り当てられたメモリが解放されます。
テスト cmocka を実行すると、次のエラーが返されます。
と
今のところ、 Add_Test()関数の最後にRemove()呼び出しを追加しました (およびAdd()をRemove_Test()の先頭に追加しました)。これで問題は解決したようです。このことから判断すると、個別の単体テストごとに割り当てられたすべてのメモリを解放する必要があります。
今私の質問:
- 複数の単体テストで割り当てられたメモリを使用することは可能ですか?
- これを解決する最善の方法は何ですか?