2012-02-23 9 views
14

मुझे इस पर कोई अच्छी मदद नहीं मिल सकती है। मेरे पास केवल कुछ बटनों के साथ एक साधारण गतिविधि है और मुझे परीक्षण करने की आवश्यकता है कि क्या वे सही नए पृष्ठ (गतिविधि) पर पुनः निर्देशित करते हैं।परीक्षण अगर कोई बटन एंड्रॉइड जूनिट (रोबोटियम के बिना pref) में एक नई गतिविधि शुरू करता है?

public void testButton() { 
     button.requestFocus(); 
     button.performClick(); 

     } 

मुझे वास्तव में इससे परे कोई जानकारी नहीं है। ट्यूटोरियल सब ऐसा करने में बहुत बेकार हैं:/

उत्तर

30

आप ActivityMonitor जरूरत है, तो यह आपको नव इंस्ट्रूमेंटेशन के दौरान गतिविधि खोला moniotor में मदद करता है, नीचे दिए गए छद्म कोड की जाँच:

public void testOpenNextActivity() { 
    // register next activity that need to be monitored. 
    ActivityMonitor activityMonitor = getInstrumentation().addMonitor(NextActivity.class.getName(), null, false); 

    // open current activity. 
    MyActivity myActivity = getActivity(); 
    final Button button = (Button) myActivity.findViewById(com.company.R.id.open_next_activity); 
    myActivity.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     // click button and open next activity. 
     button.performClick(); 
    } 
    }); 

    //Watch for the timeout 
    //example values 5000 if in ms, or 5 if it's in seconds. 
    NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5000); 
    // next activity is opened and captured. 
    assertNotNull(nextActivity); 
    nextActivity .finish(); 
} 
+0

पसंद करने के लिए कर सकते हैं waitForMonitorWithTimeout (activityMonitor, 5)। अगला गतिविधि क्या है ??? त्रुटि है: टाइप मिस्चैच: गतिविधि से गतिविधि में परिवर्तित नहीं हो सकता है – John

+0

@ जॉन अगली एक्टिविटी अगली एक्टिविटी = (नेक्स्ट एक्टिविटी) getInstrumentation()। WaitForMonitorWithTimeout (गतिविधि मॉनिटर, 5); अगली गतिविधि के लिए कलाकार डालने का प्रयास करें – Manoj

+0

@ जॉन यह – Manoj

11
NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5); 

पैरामीटर 5 जो उपर्युक्त उत्तर विधि में उल्लिखित है मिलीसेकंड में सेकेंड में नहीं है। तो यदि यह 5 है, तो कभी-कभी टेस्टकेस विफल हो जाता है क्योंकि 5 मिलीसेकंड में यह अगली गतिविधि लोड नहीं कर सकता है। तो 5000 या 10000 मिलीसेकंड निश्चित रूप से बेहतर काम करेंगे। दस्तावेज़ीकरण में उन्होंने इसे सेकंड में दिया है लेकिन वास्तव में यह मिलीसेकंड में है। तो निम्न विधि उपर्युक्त विधि से बेहतर काम करेगी।

NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 10000); 
+0

धन्यवाद ब्रो बहुत उपयोगी .... –

+1

+1 मिलीसेकंड को इंगित करने के लिए +1 !!! – Entreco

0

एक ActivityUnitTestCase परीक्षण के लिए, आप मंशा है कि एक startActivity() कॉल करने के लिए पारित किया गया था के लिए जाँच करने getStartedActivityIntent() उपयोग कर सकते हैं।

protected Intent waitForStartedActivityIntent(int timeout) { 
    long endTime = SystemClock.uptimeMillis() + timeout; 
    while (SystemClock.uptimeMillis() <= endTime) { 
     Intent intent = getStartedActivityIntent(); 
     if (intent != null) { 
      return intent; 
     } 
    } 
    return null; 
} 

क्रेडिट: waitFor... logic was inspired by this answer

नोट: एक ActivityUnitTestCase साथ, गतिविधि वास्तव में आरंभ करने के लिए नहीं है; कॉल को टेस्ट केस द्वारा सेट किए गए नकली माता-पिता द्वारा गठबंधन किया जाता है।

0

आप का उपयोग ActivityMonitor या Instrumentation पता लक्ष्य गतिविधि शुरू की है या नहीं इस लाइन NextActivity nextActivity = getInstrumentation() पर त्रुटि मिल रही नीचे

public void testButton() { 
    Instrumentation.ActivityMonitor activityMonitor = getInstrumentation() 
      .addMonitor(TargetActivity.class.getName(), null, false); 
    //button.performClick(); // Dont use this method 
    TouchUtils.clickView(this, button); 
    TargetActivity targetActivity = (TargetActivity) activityMonitor.waitForActivity(); // By using ActivityMonitor 
    // TargetActivity targetActivity = (TargetActivity) activityMonitor.waitForActivityWithTimeout(5);// It also works 
    // TargetActivity targetActivity = (TargetActivity) getInstrumentation().waitForMonitor(activityMonitor); // By using Instrumentation 
    // TargetActivity targetActivity = (TargetActivity) getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5); // It also works 
    assertNotNull("Target Activity is not launched", targetActivity); 
    } 
संबंधित मुद्दे