vaporizador para maquina leche latte hacer expreso espumar espuma curso cremar con como capuchino cafe arte android android-intent android-testing android-espresso

android - para - curso de cafe espresso



Falló la prueba de intento de café expreso (3)

Estoy aprendiendo pruebas de instrumentación android con espresso. Tengo una aplicación que tiene un menú de herramientas y hay un menú llamado Acerca de. Estuve probando, haga clic en ese elemento del menú y en los contenidos de la actividad.

función de prueba:

@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()); }

ahora la última vista de texto tiene insertado un enlace web. por lo tanto, cuando hace clic en él, abre el enlace (www.support.com) en una vista web en la aplicación. Quiero probar esta fumctionality. así que probé esto:

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

pero la prueba falla con este rastro de error:

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)

También he intentado resolver al ralentí los recursos antes de verificar la intención. Pero no funcionó. ¿Alguien puede ayudar?


Si está utilizando una ActivityTestRule personalizada, puede agregar las Intents.init(), Intents.release() adecuadas Intents.init(), Intents.release() :

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


Tuve el mismo problema y lo resolví usando IntentsTestRule lugar de ActivityTestRule . IntentsTestRule es una subclase de ActivityTestRule . Configura tu @Rule que crea la actividad de la siguiente manera:

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

Use IntentsTestRule en lugar de ActivityTestRule cuando use Espresso-Intents. https://google.github.io/android-testing-support-library/docs/espresso/intents/index.html


Tuve el mismo problema, sin embargo, cambiar a IntentsTestRule tampoco funcionó. Así que vuelvo a ActivityTestRule y llamo a Intents.init() before e Intents.release() después de la prueba que envió el Intent.

Para obtener más información, consulte esta reference .