0

私の Java アプリケーションでは、さまざまな場所で多数の乱数を生成する必要があります。単体テスト中に定数を生成するモック オブジェクトに置き換えることができるように、アプリケーションがファクトリ クラスから java.util.Random オブジェクトを取得するように細心の注意を払っています。しかし、生成された乱数のシーケンスが特定のパターンである場合にのみ分岐の一部に到達できるため、それでも満足のいく単体テスト戦略ではありません。

java.util.Random が関係しているが、決定論的な方法で数値が返される方法を制御したい場合、どのように単体テストを行うべきですか? Mock java.util.Random で返す乱数の特定のシーケンスをハード コーディングすることは、まだあまり満足のいくものではありません。私のアプリケーションの無関係なメソッドの乱数。

4

4 に答える 4

1

モックの代わりに、予想される「ランダム パターン」を実装する偽物を使用します。

于 2013-11-11T16:38:14.583 に答える
1

プログラムの実行中にさまざまなランダム値がどのように変化するかを「推測」する提案は避けてください。Random.next()連続して数回呼び出すループ内に単一の関数がある場合、生成された乱数のシーケンスを考慮しなければならないことを避けるのは難しいことは事実ですが、可能な限りそれを最小限に抑えるようにしてください。

これを回避する最も簡単な方法は、いつでも自分で Random クラスのインスタンスを別のクラス / メソッドに渡すことができるようにすることです。インスタンスのグラフのルートから Random インスタンス クラスを渡さないようにします。その後、必要なモジュールに到達して一貫してテストすることがはるかに簡単になります.

于 2013-11-11T17:31:42.447 に答える
1

Random(long seed)このようなオブジェクトを作成できます。毎回同じシードを与えることで、同じ乱数を返す必要があります

于 2013-11-10T10:22:15.080 に答える