2012-03-17 11 views
43

के लिए साझा किए गए संदर्भों के लिए परीक्षण डेटा प्रदान करना बस रोबोइलेक्ट्रिक का उपयोग करना शुरू कर दिया और ऐसा लगता है कि मुझे बहुत कुछ चाहिए। हालांकि, मैंने साझा किए गए संदर्भों के उपयोग के संबंध में एक रोडब्लॉक मारा है।Robolectric

मैं दो टेस्ट मामलों

  1. गतिविधि एक नया/खाली SharedPreferences

  2. गतिविधि पहले से ही

इसमें कुछ डेटा के साथ SharedPreferences उम्मीद टेस्ट केस 1 के लिए उम्मीद है, परीक्षण अपेक्षित के रूप में गुजर रहे हैं, तो सभी अच्छे :)

हालांकि, टेस्ट केस 2 के लिए मुझे कुछ नकली डेटा के साथ रोबोलेक्ट्रिक प्रदान करने का एक अच्छा तरीका नहीं दिख रहा है, इसलिए गतिविधि इस नकली डेटा तक पहुंचने में सक्षम है।

यह एक बहुत ही सामान्य उपयोग मामले की तरह लगता है, लेकिन मुझे यह पता लगाना प्रतीत नहीं होता है कि यह कैसे करें!

उत्तर

54

पता चला कि - अब कितना स्पष्ट लगता है!

रुचि रखने वालों के लिए, आपको केवल साझािकरण प्राप्त होते हैं, और आवश्यक डेटा के साथ इसे पॉप्युलेट करते हैं।

SharedPreferences sharedPreferences = ShadowPreferenceManager.getDefaultSharedPreferences(Robolectric.application.getApplicationContext()); 
sharedPreferences.edit().putString("testId", "12345").commit(); 

आप एक कस्टम SharedPreferences है, तो आप ऐसा करने में सक्षम होना चाहिए (वास्तव में ठीक से परीक्षण नहीं किया, लेकिन यह भी काम करना चाहिए)

SharedPreferences sharedPreferences = Robolectric.application.getSharedPreferences("you_custom_pref_name", Context.MODE_PRIVATE); 
sharedPreferences.edit().putString("testId", "12345").commit(); 

आशा इस मदद की है किसी को :)

+1

+1 पर परीक्षण के लिए इस कोड स्निपेट का उपयोग करें, यह मुझे एक बहुत मदद! (दूसरा एकदम सही काम करता है)। मैं साझा prefs पर "परीक्षण मोड" बूलियन सेट करके परीक्षण मोड में एसिंक कार्यों को लात मारने से बचने के लिए इसका उपयोग कर रहा हूं। – Jimmy

+0

टिप: आपके कोड में परीक्षण के तहत जो कॉल शेर किया गया है, सुनिश्चित करें कि आप एप्लिकेशन संदर्भ का उपयोग कर रहे हैं, अन्यथा यह काम नहीं करेगा। –

+1

@ जिमी मैं कस्टम बिल्ड कॉन्फ़िगरेशन फ़ील्ड्स का उपयोग करके इसे पूरा करना चाहता हूं: http://michiganlabs.com/string-constants-generated-gradle-build-configurations – martyglaubitz

15

स्वीकृत उत्तर जो मैंने मतदान किया है वह बिल्कुल सही है। हालात थोड़ा बदल गया है अगर आप Robolectric 3

SharedPreferences sharedPreferences = 
    RuntimeEnvironment.application.getSharedPreferences(
     "you_custom_pref_name", Context.MODE_PRIVATE); 

उपयोग कर रहे हैं तब आप हमेशा की तरह

sharedPreferences.edit().putBoolean(
    activity.getString(R.string.pref_somepref), true).commit(); 
5

Robolectric 3.1 स्नैपशॉट समाधान है कि मेरे लिए काम करता के रूप में एक प्राथमिकता जोड़ सकते हैं ... और के लिए आप

काम कर सकते हैं
Context context = RuntimeEnvironment.application.getApplicationContext(); 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
    sharedPreferences.edit().putBoolean("useOnlyOnWifi", false).commit(); 

मैं केवल वाईफाई

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