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