C++とQtを使って既存のCコードを書き直すことを検討しています。 Cコードpoll
は、複数のソースからの入力をチェックするために使用され、各ソースにはタイムアウト値があり、特定の動作がそれに関連付けられています。インスタンスQTimerの制御時間?
- のために5分後に私たちは、クライアントが
socket0
Aに接続された後、クライアントはsocket0
- に接続することを期待
intput0
に沈黙を私たちは、他の側が死んでいると仮定して、我々は再確立接触 - にしてみてください
accept
に呼び出す(socket1
)行われ、クライアントはsocket1
はこの種のもの
を閉鎖される前に、要求をするために1分を取得しすぎではありませんdifficu (poll
,gettimeofday
)を「隠す」ことにより、ある程度の時間の経過とトリガタイムアウトを簡単に制御することができます。
Qtに移動する私は、QSocketNotifier
の場合にフィールド記述子をラップし、activated(int)
信号を適切なスロットに接続することを計画していました。それは基本的にQt風味のpoll
を提供します - ただしタイムアウトはありません!
タイムアウトの場合は、QTimer
をそれぞれQSocketNotifier
に結合します。私の実験は、これがうまくいくことを示しています。しかし、テストするのは楽しいことではありません。私は本当にタイムアウトのために座って5分待つというテストはできません。
このソリューションのタイムアウトをテスト可能にする方法を教えてください。
(または多分私はこのことについて間違った方法を考えている、と完全に異なる何かをする必要があります。)
あなたは変数としてタイムアウトを設定することはできませんし、単体テストの前にそれを低いものに設定することはできませんか? – Hayt
"unit"という言葉は実際には "unit tests"ではないので削除しました。私はタイムアウト時間を短縮することができますが、それは私が通常テストに近づく方法ではありません。私はむしろ環境を制御したいと思う(この場合は* time *)。この特定のケースでは、私はまた、統合テストでタイムアウトをテストしたい(我々はいくつかのプロセスが通信している)、タイムアウト値を変更するとより多くの意味がある。 – Magnus
は設定可能なタイムアウトを持っていますが、素晴らしい機能です。私はそこで5分待たずにこれがどのように行われるのか分かりません。特にQtで。時間計測のための独自のフレームワークがあれば、5分先の時間を「設定」する機能を実装することができますが、時間的に相互依存する複数のプロセスでテストする場合にも問題が生じます。 (+ AFAIKではQtでこれを行うことはできません)。 – Hayt