Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to simulate an user click to a listview item in junit testing?

I am try to write a junit test case on selecting a list item and intent to next activity, but i dont know how to simulate this user action by junit coding. Can anyone help?

Also i wanna ask, is there any material teaching the function or syntax on simlate different user action in junit?

The following is a example from my school tutorial notes, and i want to do something like this one, but on a listview item.

public void testKilosToPounds() { 

 /* INTERACTIONS */ 
 TouchUtils.tapView(this, textKilos); // tap the EditText textKilos 
 sendKeys("1"); // sent the number 1 
 TouchUtils.clickView(this, buttonPounds); // click the button buttonPounds 

 /*CHECK THE RESULT*/ 
 double pounds; 
 try { 
 pounds = Double.parseDouble(textPounds.getText().toString()); 
 } catch (NumberFormatException e) { 
 pounds = -1; 
 } 

 //JUnit Assert equals 

 // message expected actual delta for comparing doubles 
 assertEquals("1 kilo is 2.20462262 pounds", 2.20462262, pounds, DELTA); 
 }
like image 228
Chung Avatar asked Oct 20 '22 09:10

Chung


1 Answers

I am working on JUnit from last few months to test android applications. And so i am now able to test almost things like webservices and views. Anyway i am sharing my code to test listview with item click and in next activity(InfoActivity) to check data that i sent using intent. InfoActivity is activity where i am sending data of clicked item from ListActivity.

public class ListActivityTest extends ActivityInstrumentationTestCase2<ListActivity> {

private Activity activity;
private ListView lv;
private InfoActivity contextInfoActivity;
private TextView tvInfo;

public  ListActivityTest(){
    super(ListActivity.class);
}



@Override
protected void setUp() throws Exception {
    super.setUp();
    activity = (ListActivity)getActivity();
    lv = (ListView)activity.findViewById(R.id.lv);

}

public void testCase1(){
    assertNotNull(activity);
    assertNotNull(lv);
}

public void testCase2(){

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

    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {

            lv.performItemClick(lv,4,0);
            //lv is listview,4 is item position,0 is default id
        }
    });

    Activity currentActivity = getInstrumentation().waitForMonitor(monitor);
    contextInfoActivity = (InfoActivity) currentActivity;

    assertNotNull(contextInfoActivity);
    tvInfo = (TextView)contextInfoActivity.findViewById(R.id.tvInfo);

    assertNotNull(tvInfo);
    assertEquals("Karan",tvInfo.getText().toString());
    //karan is name at position 4 in listview and i am checking it with name set in textview of next activity i.e infoActivity.

}


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

    activity = null;
    lv = null;
    tvInfo = null;
    contextInfoActivity = null;

}

Hope this ll b helpfull for you.I you want to ask something feel free to ask.Thanks

like image 60
Rohit Goswami Avatar answered Oct 23 '22 00:10

Rohit Goswami