8

を呼び出す Java コードでいくつかの junit テストを作成する必要がありますMath.random()。繰り返し可能な結果を​​生成するために独自の Random オブジェクトをインスタンス化する場合、シードを設定できることはわかっています。これも行う方法はありMath.random()ますか?

4

3 に答える 3

12

このメソッドMath.random()は、プライベートな静的フィールドを使用します。

private static Random randomNumberGenerator;

本当にこれを に設定する必要がある場合new Random(CONSTANT_SEED)(たとえば、制御できない JUNit テスト コードが必要な場合) は、リフレクションを使用して設定できます。

于 2010-05-14T19:24:35.840 に答える
9

自分のインスタンスを作成Randomして、代わりにそれを使用するのはどうですか?Math.random()作成して使用するので、シードをいじることはできないと思います。ただし、を作成しRandomて直接使用する場合は、作成時にそのシードを設定したり、後で呼び出すことができますsetSeed()

于 2010-05-14T18:48:49.660 に答える
3

Random のインスタンスでシードを設定するか、メソッドを拡張して必要な値を返すだけです

        Field field = Math.class.getDeclaredField("randomNumberGenerator");
        field.setAccessible(true);
        field.set(null, new Random() {

            @Override
            public double nextDouble() {
                return 1;
            }

        });
于 2013-02-19T10:10:35.203 に答える