21

मैं एक सतत परीक्षण वातावरण से शुरू करना चाहता हूं इसलिए मुझे अपनी प्राथमिकताओं को रीसेट/साफ़ करने की आवश्यकता है। मेरे पास अब तक परीक्षण के लिए सेटअप है। यह किसी भी त्रुटि की रिपोर्ट नहीं कर रहा है, और मेरे परीक्षण पास हो जाते हैं, लेकिन वरीयताओं को मंजूरी नहीं दी जा रही है।एंड्रॉइड: यूनिट परीक्षण के दौरान मैं एप्लिकेशन वरीयताओं को रीसेट/साफ़ कैसे करूं?

मैं "मेनमेनू" गतिविधि का परीक्षण कर रहा हूं, लेकिन मैं अस्थायी रूप से ऑप्शनस्क्रीन गतिविधि (जो एंड्रॉइड की वरीयता एक्टिविटी क्लास को बढ़ाता है) पर स्विच करता है। मुझे लगता है कि परीक्षण के दौरान परीक्षण स्क्रीन विकल्प को सही तरीके से खोलता है।

public class MyTest extends ActivityInstrumentationTestCase2<MainMenu> { 

...

@Override 
    protected void setUp() throws Exception { 
    super.setUp(); 

    Instrumentation instrumentation = getInstrumentation(); 
    Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(OptionScreen.class.getName(), null, false); 

    StartNewActivity(); // See next paragraph for what this does, probably mostly irrelevant. 
    activity = getActivity(); 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); 
    settings.edit().clear(); 
    settings.edit().commit(); // I am pretty sure this is not necessary but not harmful either. 

StartNewActivity कोड:

Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setClassName(instrumentation.getTargetContext(), 
      OptionScreen.class.getName()); 
    instrumentation.startActivitySync(intent); 
    Activity currentActivity = getInstrumentation() 
      .waitForMonitorWithTimeout(monitor, 5); 
    assertTrue(currentActivity != null); 

धन्यवाद!

उत्तर

29

समस्या यह है कि आप संपादन संपादक() कॉल से मूल संपादक को सहेज नहीं रहे हैं, और आप उसमें कोई भी बदलाव किए बिना संपादक का एक नया उदाहरण और कॉल प्रतिबद्ध() प्राप्त करते हैं। इस प्रयास करें:

Editor editor = settings.edit(); 
editor.clear(); 
editor.commit(); 
+0

धन्यवाद इतना। वाह, मुझे वास्तव में दस्तावेज़ीकरण को और अधिक अच्छी तरह से पढ़ना चाहिए। मुझे एहसास नहीं हुआ कि मैं एक संपादक वस्तु का निर्माण कर रहा था; मुझे उम्मीद थी कि मैं वरीयताओं पर सीधे काम कर रहा था। –

+4

इसके अलावा यह सेटिंग्स .edit()। Clear()। प्रतिबद्ध(); – Federico

3

जवाब यहाँ है, android unit test: clearing prefs before testing activity

कॉल,

this.getInstrumentation().getTargetContext() 
+0

हां, जो मैंने प्रस्तुत कोड में था। मुझे शायद सवाल फिर से लिखना चाहिए क्योंकि यह वास्तव में था, "मेरे कोड में बग कहां है?" –

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