
About IntentsTestRule
IntentsTestRule is AndroidTest which can do intent test.If use, we have to add Espresso-Intents library in build.gradle.
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.1'
Test Sample
The following code is sample which Intent has Intent.ACTION_CALL by user operation.
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityIntentTest {
@Rule
public IntentsTestRule<MainActivity> mActivityRule = new IntentsTestRule<>(
MainActivity.class);
@Before
public void stubAllExternalIntents() {
// By default Espresso Intents does not stub any Intents. Stubbing needs to be setup before
// every test run. In this case all external Intents will be blocked.
intending(not(isInternal()))
.respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null));
}
@Test
public void callPhone() {
// call action
onView(withId(R.id.callButton)).perform(click());
// test
intended(allOf(
hasAction(Intent.ACTION_CALL),
hasData("tel:0123456789"),
toPackage("com.android.server.telecom")));
}
}
How to create test class.- create test class with RunWith annotation
- add IntentsTestRule with Rule annotation
We can check whether Intent has occurred.
Add Intent to Starting Activity
If need to add Intent to Activity, we need to do override IntentsTestRule#getActivityIntent.
@Rule
public IntentsTestRule<MainActivity> mActivityRule = new IntentsTestRule<>(MainActivity.class) {
/**
* add Intent to Activity
*/
@Override
protected Intent getActivityIntent() {
Intent intent = new Intent();
intent.putExtra(KEY_DATA,data);
return intent;
}
};
https://github.com/googlesamples/android-testing