0

I want to test if a second activity is started upon a button click

public void testLanguaeSelect() {
    startActivity(activityLanguageIntent, null, null);
    TextView textViewTitleBarText = (TextView) getActivity().findViewById(R.id.titleBarText);
    assertEquals(textViewTitleBarText.getText(), "Sprache");
    final TextView textViewTextMiddle = (TextView) getActivity().findViewById(R.id.listItemTextMiddle);
    assertEquals(textViewTextMiddle.getText(), "Deutsch");

    ((RelativeLayout) textViewTextMiddle.getParent()).performClick();

    // check if intend is sent
    Intent startedActivityIntent = getStartedActivityIntent();
    assertNotNull(startedActivityIntent);

    // wait for mainactivity to be started
    ActivityMonitor mainActivityMonitor = new Instrumentation.ActivityMonitor(MainActivity.class.getName(), null, false);
    getInstrumentation().addMonitor(mainActivityMonitor);
    Activity activity = mainActivityMonitor.waitForActivityWithTimeout(10000);

    assertNotNull("Activity was not started", activity);

}

the onlclick function

    @Override
    public void onClick(View v) {
        v.startAnimation(AnimationUtils.loadAnimation(v.getContext(), R.layout.animation_item_click));
        Intent intent = new Intent(v.getContext(), MainActivity.class);
        intent.putExtra("language", locale);
        v.getContext().startActivity(intent);
    }

The Intend is correct and the onclick function is called but waitForMonitorWithTimeout always runs in timeout and returns null.

my Android versions are

<uses-sdk
    android:minSdkVersion="17"
    android:targetSdkVersion="21" />
wutzebaer
  • 14,365
  • 19
  • 99
  • 170

1 Answers1

0
MainActivity secondActivity = (MainActivity) getInstrumentation().waitForMonitorWithTimeout(monitor, 3);

The parameter 3 which is mentioned in above answer's method is in milliseconds not in seconds. So if it is 3, sometimes testcase get failed Because in 5 milliseconds it can't load the next activity. So 5000 or 10000 milliseconds will definitely work better. In documentation they have given it in seconds But in fact it is in milliseconds. So following method will work better than above method

MainActivity secondActivity = (MainActivity) getInstrumentation().waitForMonitorWithTimeout(monitor,10000);

Ref : test if a button starts a new activity in android junit (pref without robotium)?

Community
  • 1
  • 1
Haresh Chhelana
  • 24,720
  • 5
  • 57
  • 67