2011-10-21 14 views
2

私はStartStopの間の時間を測定するクラスを持っています。私はStartStopの間でboost::this_thread::sleepを使用して眠る単体テストを作成しました。結果は睡眠時間に近いとテストしました。ストップウォッチの単体テストを書くには?

ただし、このテストはビルドエージェントでは失敗しますが、開発マシンでは失敗します。問題は、これがストップウォッチの実際の問題であるかどうか、またはビルドエージェント(他のプロセスを実行している、仮想マシン)が私が言った時間よりも長く眠るかもしれないという "問題"

質問:「正確にx秒かかるものを実行しますか?」というようなものを書く強力な方法がありますか?

ありがとうございます!

答えて

7

このようなものを非リアルタイムシステムで確実にテストする方法はありません。方法は、ストップウォッチが使用するシステム時間を取得し、テストでそれらをモックするためのAPIをラップすることです。

1

これは、使用しているオペレーティングシステムによって異なります。マルチプログラミングをサポートするシステムでは、スレッドの実行時間は決定的ではありません。しかし、いくつかのリアルタイムシステムでは、スレッドが最優先の場合はほぼ正確です。スレッドはOSスケジューラによってプリエンプトされないため、このケースをシミュレートするために割り込みを無効にすることができます。

1

睡眠の前後のシステム時間をとり、睡眠時間ではなく、これらの時間の差のみを参照してください。

1

ストップウォッチの解像度は?秒単位で正確にする必要がある場合は、3秒間スリープ状態にして、2.9〜3.1の間にいるかどうかを確認することができます。ミリ/秒精度が必要な場合は、最初の返信で示唆したようにタイムスタンプモックを使用するだけです。

関連する問題