2013-07-08 12 views
5

मैं ActivityInstrumentationTestCase2 के साथ परीक्षण करने का प्रयास कर रहा हूं।Android में AlertDialog का परीक्षण कैसे करें?

this.setmBtAppelerFixe(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder dialog = new AlertDialog.Builder(InterventionImmobiliereDetailsActivity.this); 
      dialog.setTitle("Appel"); 
      dialog.setMessage("Appeler le contact ?"); 
      dialog.setCancelable(true); 
      dialog.setNegativeButton("Non", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
      dialog.setPositiveButton("Oui", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        InterventionImmobiliereDetailsActivity.this.lancerIntentAppel(mIntervention.getTelContact()); 
       } 
      }); 

      mAdAppelerFixe = dialog.create(); 
      mAdAppelerFixe.show(); 
     } 
    }); 

अब मैं सकारात्मक बटन पर क्लिक करने के लिए प्रबंधन नहीं कर सकते:

यहाँ मूल कोड है। इस कोड को काम करने के लिए प्रतीत नहीं होता:

mActivity.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      assertTrue(mLLAppelerFixe.performClick()); 

      AlertDialog mDialog = mActivity.getAdAppelerFixe(); 
      assertTrue(mDialog.isShowing()); 

      Button okButton = mDialog.getButton(AlertDialog.BUTTON_POSITIVE); 

      assertTrue(okButton.performClick()); 
      assertTrue(mActivity.isNumeroValide()); 
     } 
    }); 

सबसे पहले मैं AlertDialog खोलने के लिए मेरी लेआउट पर एक क्लिक करते हैं। फिर मुझे OK_BUTTON मिलता है और मैं उस पर एक क्लिक करता हूं। इसे numeroValide बूलियन को सही पर सेट करना चाहिए। लेकिन कुछ भी नहीं।

मैं बस बटन के साथ AlertDialog का परीक्षण कैसे कर सकता हूं?

उत्तर

3

यह मेरा गठजोड़ 4 डिवाइस में पूरी तरह से काम कर रहा है:

@MediumTest 
public void testStartMyActivity() { 
    monitor = getInstrumentation().addMonitor(MyActivity.class.getName(), null, false); 

    TouchUtils.clickView(this, startMyActivityButton); 

    MyActivity myActivity = (MyActivity) monitor.waitForActivityWithTimeout(2000); 
    assertNotNull("MyActivity activity not started, activity is null", myActivity); 

    AlertDialog dialog = myActivity.getLastDialog(); // I create getLastDialog method in MyActivity class. Its return last created AlertDialog 
    if (dialog.isShowing()) { 
     try { 
      performClick(dialog.getButton(DialogInterface.BUTTON_POSITIVE)); 
     } catch (Throwable e) { 
      e.printStackTrace(); 
     } 
    } 

    myActivity.finish(); 
    getInstrumentation().removeMonitor(monitor); 
} 

private void performClick(final Button button) throws Throwable { 
    runTestOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      button.performClick(); 
     } 
    }); 
    getInstrumentation().waitForIdleSync(); 
} 

यहाँ उदाहरण (एंड्रॉयड गूगल स्रोत से) AlertDialog परीक्षण: AlertDialogTest.java

0

आप कोड

साथ अब के लिए एस्प्रेसो उपयोग कर सकते हैं
onView(withText("South China Sea")) 
    .inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))) 
    .perform(click()); 

EspressoSamples

0 देखें
2

अपनी मूल गतिविधि में आप अंतिम अलर्टडिअलॉग के उदाहरण को वापस करने के लिए एक सरल विधि बना सकते हैं।

public AlertDialog getDialog(){ 
    return alertDialog; 
} 

परीक्षण गतिविधि में आप चेतावनी संवाद तक पहुंच सकते हैं और निम्न कोड का उपयोग कर बटन क्लिक कर सकते हैं।

ActivityMonitor monitor = getInstrumentation().addMonitor(MyActivity.class.getName(), null, false); 
MyActivity myActivity = (MyActivity) monitor.waitForActivity(); 
getInstrumentation().waitForIdleSync();  

// access the alert dialog using the getDialog() method created in the activity 
AlertDialog dialog = myActivity.getDialog(); 

// access the button 
Button okBtn = (Button) dialog.findViewById(R.id.button_ok); 
TouchUtils.clickView(this, okBtn); 
getInstrumentation().removeMonitor(monitor); 
संबंधित मुद्दे