独自のメモリ割り当てルーチンを提供するライブラリをテストする必要があります。
void* allocation_routine(size_t size) throw();
ドキュメントには、この関数は少なくともsizeバイトのメモリを割り当てると記載されています(それ以上割り当てることができます)。ちなみに関数は内部でposix_memalignを使用していますが、実装は変更される可能性があります。
そのような関数の単体テストを書くことが可能かどうか疑問に思っていますか?必要な量のメモリが割り当てられたかどうかをどのようにテストできますか?
更新:
単体テストを記述できない場合、最も近いソリューションは何ですか?
システムコールがないとヒープにメモリを割り当てることができないため、この関数の単体テストを作成することはできません。したがって、テスト対象のユニットをオペレーティングシステムから分離できないため、これは統合テストです。
n
バイトに対してallocation_routine
を呼び出す新しい小さな実行可能ファイルを作成します。 allocation_routine
が返すものに応じて、それがnullptr
ではないと断言できます。次に、n
バイトをこのメモリ領域に書き込みます。 address sanitizer(gcc
とclang
の両方で利用可能)を使用してコンパイルしてリンクし、統合してみますアプリケーションのテストランナー(ctest
など)に追加します。
また、POSIX setrlimit を使用して使用可能なヒープを制限し、割り当てが失敗したときの動作を確認することもできます。
単体テストではありませんが、Valgrindを使用してメモリに関するさまざまな情報を取得できます。
主にデバッグに使用されますが、何かが適切に割り当てられていない場合は警告が表示されます。