简体   繁体   中英

Set seed on Math.random()

I need to write some junit tests on Java code that calls Math.random() . I know that I can set the seed if I was instantiating my own Random object to produce repeatable results. Is there a way to do this also for Math.random() ?

The method Math.random() uses a private static field:

private static Random randomNumberGenerator;

If you really really need to set this to a new Random(CONSTANT_SEED) (for instance you need to JUNit test code which you have no control over) you could do so by using reflection .

How about creating an instance of Random yourself and using that instead? Math.random() creates one and uses that, so I don't think that you can mess with its seed. If you create a Random and use it directly, however, you can set the seed for that when you create it, and/or you can call setSeed() on it later.

Set it with instance of Random with your seed or just extend the methods to return values you need

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

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

        });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM