在Math.random()上设置种子

时间:2010-05-14 18:42:54

标签: java random random-seed

我需要在调用Math.random()的Java代码上编写一些junit测试。我知道如果我实例化自己的Random对象以产生可重复的结果,我可以设置种子。有没有办法为Math.random()

执行此操作

3 个答案:

答案 0 :(得分:12)

方法Math.random()使用私有静态字段:

private static Random randomNumberGenerator;

如果确实需要将其设置为new Random(CONSTANT_SEED)(例如,您需要JUNit测试代码,而您无法控制),则可以使用反射

答案 1 :(得分:9)

如何自己创建Random实例并使用它? Math.random()创建一个并使用它,所以我不认为你可以搞乱它的种子。但是,如果您创建Random并直接使用它,则可以在创建时为其设置种子,和/或稍后可以在其上调用setSeed()

答案 2 :(得分:2)

使用种子的Random实例设置它,或者只是扩展方法以返回所需的值

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

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

        });