检查是否使用 Espresso 启动了一个新的 Activity
Check if a new Activity is started with Espresso
如果在我登录后启动了一个新的 Activity,那么我就知道一切正常。我试图实现这个,但我现在得到了
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
这是我的测试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()));
}
}
我在前面的问题中发现这行代码应该对我有帮助,但是这行代码产生了 NullPointer。
预期(hasComponent(MainActivity.classenter code here
.getName()));
我该如何解决这个问题?我做错了什么?
这是完整的堆栈跟踪:
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.check(Intents.java:190)
at android.support.test.espresso.ViewInteraction.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)
嗯 解决方法就是这样检查:
intended(hasComponent(OnboardingActivity::class.java.name))
为了执行此检查,您需要添加意图库(androidTestImplementation "androidx.test.espresso:espresso-intents:$intentsVersion")
并通过调用初始化它:
Intents.init()
Lefteris 的解决方案或此代码有效:
intended(hasComponent(MainActivity.class.getName()));
但是别忘了把ActivityTestRule
也改成IntentsTestRule
。
@Rule
public IntentsTestRule<LoginActivity> mLoginActivityActivityTestRule =
new IntentsTestRule<>(LoginActivity.class);
如果在我登录后启动了一个新的 Activity,那么我就知道一切正常。我试图实现这个,但我现在得到了
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
这是我的测试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()));
}
}
我在前面的问题中发现这行代码应该对我有帮助,但是这行代码产生了 NullPointer。
预期(hasComponent(MainActivity.classenter code here
.getName()));
我该如何解决这个问题?我做错了什么?
这是完整的堆栈跟踪:
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.check(Intents.java:190)
at android.support.test.espresso.ViewInteraction.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)
嗯 解决方法就是这样检查:
intended(hasComponent(OnboardingActivity::class.java.name))
为了执行此检查,您需要添加意图库(androidTestImplementation "androidx.test.espresso:espresso-intents:$intentsVersion")
并通过调用初始化它:
Intents.init()
Lefteris 的解决方案或此代码有效:
intended(hasComponent(MainActivity.class.getName()));
但是别忘了把ActivityTestRule
也改成IntentsTestRule
。
@Rule
public IntentsTestRule<LoginActivity> mLoginActivityActivityTestRule =
new IntentsTestRule<>(LoginActivity.class);