在 Math.random() 上设置种子

问题描述 投票:0回答:4

我需要在调用

Math.random()
的 Java 代码上编写一些 junit 测试。 我知道如果我实例化自己的随机对象以产生可重复的结果,我可以设置种子。有没有办法也为
Math.random()
做到这一点?

java random random-seed
4个回答
12
投票

方法

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

private static Random randomNumberGenerator;

如果您真的需要将其设置为

new Random(CONSTANT_SEED)
(例如您需要JUNit测试您无法控制的代码),您可以使用reflection来实现。


9
投票

您自己创建一个

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


3
投票

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

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

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

        });

0
投票

您可以编写自己的 Random() 和 Seed() 函数...

© www.soinside.com 2019 - 2024. All rights reserved.