2010-05-14 68 views
8

我需要在調用Math.random()的Java代碼上編寫一些junit測試。我知道如果我正在實例化我自己的Random對象以產生可重複的結果,我可以設置種子。有沒有辦法做到這一點也爲Math.random()在Math.random()上設置種子

回答

12

的方法Math.random()使用專用靜態字段:

private static Random randomNumberGenerator; 

如果你真的需要將其設置爲一個new Random(CONSTANT_SEED)(比如你需要,你無法控制的JUnit測試代碼)你可以通過使用反射來實現。

+5

那你能不能對你的解答的反射部分詳細說明,請價值觀? – 2012-05-21 04:51:17

9

如何自己創建Random的實例並使用它? Math.random()創建一個並使用它,所以我不認爲你可以混淆它的種子。但是,如果您創建一個Random並直接使用它,則可以在創建它時爲其設置種子,並且/或者稍後可以在其上調用setSeed()

2

與隨機的情況下與你的種子或設置它只是擴展方法,返回你需要

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

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

     }); 
+0

隨機的規範版應該返回4! – 2014-12-08 15:11:50