【发布时间】:2013-12-01 10:54:28
【问题描述】:
我需要对调用Math.random() 的Java 代码编写一些junit 测试。我知道如果我实例化自己的 Random 对象以产生可重复的结果,我可以设置种子。 Math.random() 有没有办法做到这一点?
【问题讨论】:
标签: java random random-seed
我需要对调用Math.random() 的Java 代码编写一些junit 测试。我知道如果我实例化自己的 Random 对象以产生可重复的结果,我可以设置种子。 Math.random() 有没有办法做到这一点?
【问题讨论】:
标签: java random random-seed
Math.random() 方法使用私有静态字段:
private static Random randomNumberGenerator;
如果您真的需要将此设置为new Random(CONSTANT_SEED)(例如,您需要 JUNit 测试您无法控制的代码),您可以使用 reflection。
【讨论】:
RandomNumberGeneratorHolder 类,然后拥有一个静态 final Random。
如何自己创建一个Random 的实例并使用它呢? Math.random() 创建一个并使用它,所以我认为你不能弄乱它的种子。但是,如果您创建 Random 并直接使用它,您可以在创建它时为其设置种子,和/或您可以稍后调用 setSeed()。
【讨论】:
用你的种子设置它的随机实例,或者只是扩展方法以返回你需要的值
Field field = Math.class.getDeclaredField("randomNumberGenerator");
field.setAccessible(true);
field.set(null, new Random() {
@Override
public double nextDouble() {
return 1;
}
});
【讨论】: