在Math.random()上设置种子

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

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

 private static Random randomNumberGenerator; 

如果你真的需要将它设置为一个new Random(CONSTANT_SEED) (例如你需要你无法控制的JUNit测试代码),你可以通过使用reflection来实现

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

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

  Field field = Math.class.getDeclaredField("randomNumberGenerator"); field.setAccessible(true); field.set(null, new Random() { @Override public double nextDouble() { return 1; } });