私は単体テストを書いており、write(2)呼び出しが0を返す状況をいくつかのコードがどのように処理するかをテストしたいと思います。いつものように、テストをできるだけ現実的に保つのが最善です。
write(2)が呼び出されたときに0を返す限り、任意の種類のファイル記述子を使用してこれを達成できます。また、書き込みに必要な任意のサイズのほぼすべてのデータを渡すこともできます。
ただし、ゼロを数回返した後に別のスレッドで記述子の動作を変更できるようにしたいので、長さ0のデータを書き込むことはできません。
ファイル記述子をこの状態にする合理的に移植可能で安定した方法を考えることができる人はいますか?可能であれば、最新のLinuxをターゲットにすることをお勧めしますが、より広範囲に(* BSD、OS Xなど)動作することをお勧めします。
ベストアンサー1
実際の入力に影響を与えることが困難な場合(たとえば、ディスクエラーに対する反応)、いくつかのグローバル状態に依存する関数の周りに薄いラッパーを作成する必要があります。この場合、write()
ゼロまたは実際の戻り値を返すためにこのようなラッパーを入れますwrite()
。
ラッパーのオーバーヘッドが大きすぎる場合は、一部のラッパーを使用して本番システムでラッパーコードを完全に省略することができますが、少なくとも#define
単位の間に正しい変更を実行するために必要なグローバル状態を設定して、最上位のレイヤーをテストできます。テスト反応。write()