Check if a new action is running with Espresso

If a new activity opens after my login, I know that everything went right. I tried to implement this, but now I got

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.test.espresso.intent.Intents.internalIntended(org.hamcrest.Matcher, android.support.test.espresso.intent.VerificationMode, java.util.List)' on a null object reference 

This is my test class:

 import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.action.ViewActions.typeText; import static android.support.test.espresso.intent.Intents.intended; import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent; import static android.support.test.espresso.matcher.ViewMatchers.withId; @RunWith(AndroidJUnit4.class) public class LoginActivityTest { @Rule public ActivityTestRule<LoginActivity> mLoginActivityActivityTestRule = new ActivityTestRule<>(LoginActivity.class); @Test public void clickLoginButton_ShowsSnackBarRightCredentials() throws Exception { onView(withId(R.id.login_email)).perform(typeText(" a@aa.aa ")); onView(withId(R.id.login_password)).perform(typeText("11111111")); onView(withId(R.id.email_sign_in_button)).perform(click()); intended(hasComponent(MainActivity.class.getName())); } } 

In previous questions, I found that this line of code helps me, but this line creates NullPointer.

designed (hasComponent (MainActivity.class enter code here .getName ()));

How can I solve this problem? What am I doing wrong?

This is a complete stack trace:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.test.espresso.intent.Intents.internalIntended(org.hamcrest.Matcher, android.support.test.espresso.intent.VerificationMode, java.util.List)' on a null object reference at android.support.test.espresso.intent.Intents$2.check(Intents.java:190) at android.support.test.espresso.ViewInteraction$2.run(ViewInteraction.java:170) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
+6
source share
2 answers

Good. The solution is to check this way:

  intended(hasComponent(new ComponentName(getTargetContext(), MainActivity.class))); 
+1
source

Lefteris solution or this code works:

 intended(hasComponent(MainActivity.class.getName())); 

But remember to also change the ActivityTestRule to IntentsTestRule .

  @Rule public IntentsTestRule<LoginActivity> mLoginActivityActivityTestRule = new IntentsTestRule<>(LoginActivity.class); 
+10
source

Source: https://habr.com/ru/post/1014487/


All Articles