2010-05-14 15 views
8

मुझे जावा कोड पर कुछ जूनिट परीक्षण लिखने की आवश्यकता है जो Math.random() पर कॉल करता है। मुझे पता है कि अगर मैं दोहराने योग्य परिणामों का उत्पादन करने के लिए अपनी खुद की यादृच्छिक वस्तु को तत्काल कर रहा था तो मैं बीज सेट कर सकता हूं। क्या Math.random() के लिए ऐसा करने का कोई तरीका है?Math.random पर सेट करें बीज()

उत्तर

12

विधि Math.random() एक निजी स्थिर क्षेत्र का उपयोग करता:

private static Random randomNumberGenerator; 

आप वास्तव में बहुत (उदाहरण के लिए आप JUnit परीक्षण कोड आप कोई नियंत्रण नहीं है जो की जरूरत है) यदि आप एक new Random(CONSTANT_SEED) को यह निर्धारित करने के लिए की जरूरत है प्रतिबिंब का उपयोग करके ऐसा कर सकता है।

+5

आप संभवतः अपने जवाब का प्रतिबिंब ओर से विस्तृत किया जा सका कृपया वापस जाने के लिए? –

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 वापस आना चाहिए! –

संबंधित मुद्दे