2016-04-20 18 views
7

के साथ इरादे को दबाते समय त्रुटि मेरे पास दो अनुप्रयोग हैं जो इरादों के माध्यम से एक दूसरे के साथ बातचीत करते हैं। मुझे लगता है कि मान लीजिए कि अनुप्रयोग एक जाने सत्यापित करना चाहते हैं सही ढंग से वास्तव में अनुप्रयोग बी लॉन्च किए बिना के लिए अनुप्रयोग बीstartActivity कहता है। मैंने intending के विभिन्न संयोजनों की कोशिश की है और एस्प्रेसो ने अभी भी ऐप बी लॉन्च करने के बजाय इरादे के माध्यम से लॉन्च किया है। इससे शेष परीक्षण विफल हो जाते हैं क्योंकि UI को ऐप बी द्वारा अवरोधित किया जाता है। कोई विचार?एस्प्रेसो

@RunWith(AndroidJUnit4.class) 
@LargeTest 
public class MyActivityUiIntentsTest 
{ 

    @Rule 
    public IntentsTestRule<MyActivity> activityRule = 
      new IntentsTestRule<>(MyActivity.class, true, false); 

    @Test 
    public void shouldStartOtherActivityWhenButtonClicked() 
    { 
     Intents.init(); 
     intending(toPackage("my.package")) 
      .respondWith(new ActivityResult(Activity.RESULT_OK, null)); 

     activityRule.launchActivity(new Intent()); 

     onView(withId(R.id.viewId)).perform(click()); 
     intended(hasComponent(hasShortClassName("the.other.class.name"))); 

     Intents.release(); 
    } 
} 

UPDATED: onClick के लिए कोड:

@OnClick(R.id.viewId) 
public void startOtherActivity() 
{ 
    Intent intent = new Intent(); 
    intent.setClassName("my.package", "the.other.class.name"); 
    startActivity(intent); 
    finish(); 
} 
+1

शुरू की है हम onClick में आशय निर्माण के लिए कोड को देख सकते हैं launchActivity नीचे अपना intending... कोड ले जाएँ और .init() निकालना चाहते हैं? और क्या आपने इरादे पर पैकेज नाम लॉग किए हैं? I.e आपका इरादा सही इरादे को पकड़ नहीं रहा है – Blundell

+0

'ऑनक्लिक' नमूना कोड जोड़ा गया। – brwngrldev

+0

आप किस डिवाइस/एमएमयू एपीआई संस्करण पर चल रहे हैं? –

उत्तर

3

क्योंकि IntentsTestRule आप के लिए init कॉल करेंगे के बाद गतिविधि

+0

इस मुद्दे को हल किया, धन्यवाद! – brwngrldev

2

संभव समाधान में से एक आशय भेजने के लिए अविवेक है।

उदाहरण के लिए हमारे पास IntentDispatcher है जिसे हम custom instrumentation test runner के साथ चाल के माध्यम से कार्यात्मक UI परीक्षणों में परीक्षण कार्यान्वयन के साथ प्रतिस्थापित करते हैं।

IntentDispatcher के वास्तविक कार्यान्वयन सिर्फ context.startActivity() जबकि टेस्ट मैचों में हम विशेष गतिविधि कि Intent की सभी सामग्री को प्रदर्शित करता है तो हम सत्यापित करें कि यह Intent कि हम एस्प्रेसो matchers साथ कार्रवाई करने के लिए चाहता था कर रहे हैं खोलने के लिए कहता है।

इसके अलावा हमने कैमरा ऐप खोलने और परिणाम का मज़ाक उड़ाते हुए या नियमित startActivity() कॉल का मज़ाक उड़ाते हुए चीजों को संभालने के लिए नियमों का समूह लिखा।

+0

यह भी एक अच्छा विचार है, इसे साझा करने के लिए धन्यवाद। – brwngrldev

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