Activity testing and specific fragment with espresso

In my activity posted two fragments. In onCreate (), I determine which fragment will be shown.

@Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); handleIntent(getIntent()); } private void handleIntent(Intent intent) { LogUtils.d(TAG, "handleIntent action=" + intent.getAction()); if (MainIntentService.ACTION_TARGET_OPENER.equals(intent.getAction())) { loadOpener(); } else if (MainIntentService.ACTION_TARGET_LOGIN.equals(intent.getAction())) { loadLogin(); } else { //noop } } private void loadOpener() { OpenerFragment openerFragment = OpenerFragment.newInstance(); loadFragment(R.id.frame_fragment_container, openerFragment, true); } 

loadFragment () takes over the transaction and writes the fragment ...

This is my test class:

 @RunWith(AndroidJUnit4.class) @LargeTest public class LoginScreenTest { @Rule public ActivityTestRule<LoginActivity> mNotesActivityTestRule = new ActivityTestRule<>(LoginActivity.class); @Test public void clickAddNoteButton_opensAddNoteUi() throws Exception { onView(withId(R.id.button_login_submit)).perform(click()); onView(withId(R.id.text_login)).check(matches(isDisplayed())); } 

}

How can I tell in a test class which fragment should be shown?

+5
source share
1 answer

Activate your rule so that the activity does not start automatically:

  @Rule public ActivityTestRule<LoginActivity> mNotesActivityTestRule = new ActivityTestRule<>(LoginActivity.class, false, false); 

Then start your activity manually and pass on the intention that interests you:

 Intent intent = new Intent(); intent.setAction(MainIntentService.ACTION_TARGET_OPENER); mNotesActivityTestRule.launchActivity(intent); 
+8
source

All Articles