2012-01-06 72 views
2

パラメータを渡すメソッドを呼び出します。このパラメータが特定のものと等しい場合、スレッドは停止するまで繰り返し何かを開始します。繰り返しごとにいくつかの値が変更されます。
これらの値をJUnitから確認する方法はありますか?JUnitテスト:スレッドからの結果をテストする方法

+1

いくつかのコードを見てみましょう。 – dan

答えて

3

スレッドを生成する場合は、もう単体テストではありません。つまり、統合テストです。この「値」を変更するロジックをスレッドの産出なしでテストできるように、コードをリファクタリングします。スレッドを生成することなく動作する場合、スレッドを生成するときに動作します(私は自分自身をそのスレッドの講義のために設定したことを知っています...あなたは共有変数を正しく同期させる必要があります。デッドロックを引き起こす可能性のあるコードを持つ)。

コードを見ることなく、テストする方法を提案するのは難しいです。しかし、あなたがスレッドを生成しているなら、あなたは間違いなく単体テストではありません。

+1

私は、単一の繰り返しをカプセル化し、それをユニットテストするために、 'tick()'メソッドが必要だと言っています。オブジェクトのフィールドを変更するのではなく、「いくつかの値」を返す場合は、テスト(および全体的なデカップリング)の方が優れています。 –

+0

@ヴィクター合意、それはスレッドの振る舞いのよりよいカプセル化です。それでも、私は 'ticking'を開始する前に、全体的な行動単位をテストしたいと思っています – BeRecursive

+0

申し訳ありませんが、コードを提供していません。それは私の大学のプロジェクトの一部です。私はこれができないのではないかと恐れています。私は私のコードがうまくいくように動作することを知っていますが、プロジェクトにいくつかのJUitテストを含める必要があるので、コードのこの部分をテストする方法があるかどうかは疑問でした。私はスレッドを作成し、スレッドは指定された間隔で繰り返しを行います。だから、JUnitをそのまま使ってテストすることはできません。ありがとうございました! :) – anna

0

各反復で値が適切に変更されているかどうかを確認する場合は、予想される入力で反復コードを呼び出し、期待される出力をテストします。孤立して各peiceをテストします。

は疑似Javaコード:

for each (file : files) { 
    doSomething(file); // this updates some running totals or something 
} 

次に、あなたがテストし、値が適切に更新するかどうかを確認し(ここで、モックとしたい各入力の上ごdoSomething()を呼び出すいくつかのユニットテストを書きたいです必要)。その後、スレッドを生成させ、結果の値をチェックする統合テストを行います。

関連する問題