意式浓缩咖啡testing失败

我正在学习使用espresso的android仪器testing。 我有一个应用程序,其中有一个drawermenu,有关于菜单。 我正在testing点击该菜单项目和活动的内容。

testfunction:

@Test public void testNavigationDrawerAboutMenu() { onView(withId(R.id.drawer_layout)) .perform(DrawerActions.open()); //open drawer onView(withText("About")).perform(click()); onView(withId(R.id.aboutsptemail)).check(matches(withText(R.string.screen_about_support_email))); onView(withId(R.id.aboutcpright)).check(matches(isDisplayed())); onView(withId(R.id.aboutprivacy)).check(matches(isDisplayed())); onView(withId(R.id.abouttermsconditions)).check(matches(isDisplayed())); onView(withId(R.id.aboutsptemail)).perform(click()); } 

现在最后的textview已经embedded了weblink。 所以当你点击它时,它会自动在应用程序的webview中打开链接(www.support.com)。 我想要testing这个function。 所以我试过这个:

 intended(hasComponent(WebViewActivity.class.getName())); //check if webview called on supportEmail link click 

但是这个错误跟踪testing失败:

 java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.test.espresso.intent.OngoingStubbing android.support.test.espresso.intent.Intents.internalIntending(org.hamcrest.Matcher)' on a null object reference at android.support.test.espresso.intent.Intents.intending(Intents.java:155) at com.ScanBuy.SmartLabel.NavigationDrawerActivityTests.testNavigationDrawerAboutMenu(NavigationDrawerActivityTests.java:94) at java.lang.reflect.Method.invoke(Native Method) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55) at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270) at org.junit.rules.RunRules.evaluate(RunRules.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:27) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at org.junit.runner.JUnitCore.run(JUnitCore.java:115) at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59) at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879) 

在检查意图之前,我也尝试通过闲置资源来解决问题。 但没有工作。 任何人都可以帮忙吗?

  • Android L中显示错误的默认应用程序列表
  • 有一个活动的例子
  • 图像共享意图适用于Gmail,但崩溃FB和Twitter
  • Android通知操作不会调用挂起的意图服务
  • 与所有活动共享NavigationView?
  • Android - 保持以前额外的意图额外的时候去上级活动
  • 相机的surfaceview不工作在android棒棒糖的操作系统
  • Android:通知中的PendingIntent不会触发onCreate(),如果将活动带回到屏幕上
  • 我有同样的问题,并通过使用IntentsTestRule而不是ActivityTestRule解决它。 IntentsTestRuleActivityTestRule一个子类。 设置你的@Rule来创build这样的活动:

     @Rule public IntentsTestRule<MyActivity> mActivity = new IntentsTestRule<MyActivity>(MyActivity.class) { @Override protected Intent getActivityIntent() { ... } }; 

    使用Espresso-Intents时,请使用IntentsTestRule而不是ActivityTestRule。 https://google.github.io/android-testing-support-library/docs/espresso/intents/index.html

    如果您正在使用自定义的ActivityTestRule ,则可以添加正确的Intents.init(), Intents.release()调用:

     @Override protected void afterActivityLaunched() { Intents.init(); super.afterActivityLaunched(); } @Override protected void afterActivityFinished() { super.afterActivityFinished(); Intents.release(); }