Intereting Posts
Заполнить список пользовательского вида с помощью ListFragment Какие аргументы передаются в AsyncTask <arg1, arg2, arg3>? Команда adb shell, чтобы открыть диалоговое окно удаления пакета Android Как получить доступ к ресурсу с динамическим именем в моем случае? Android проверяет, что пользователь зарегистрировался раньше, иначе начните действие входа Есть ли конвертер Java 7 на Java 6? Храните дополнительные данные в Диспетчере учетных записей Android Как получить vCard (.vcf-файл) в Android-контакты с веб-сайта Установить язык на французский в android DatePickerDialog Поделиться ссылкой и текстом с Android Facebook SDK 3.0 Как определить, может ли Android обрабатывать PDF Как перенаправить из одной активности в другую деятельность Случайная строка из списка массивов строк Android: java.lang.IllegalArgumentException: недопустимый тип элемента полезной нагрузки Как сделать SearchView всегда расширенным в Android?

Тестовый тест эспрессо

Я изучаю аппаратное тестирование андроида с эспрессо. У меня есть приложение, в котором есть drawermenu, и есть меню под названием About. Я тестировал клик по этому пункту меню и содержимому активности.

функции теста:

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

Теперь в последнем тексте есть встроенный weblink. Поэтому, когда вы нажимаете на него, он открывает ссылку (www.support.com) в веб-браузере в приложении. Я хочу проверить эту футурмальность. Поэтому я попробовал это:

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

Но тест не выполняется с этой ошибкой:

 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) 

Я также попытался решить проблему, простаивая ресурсы, прежде чем проверять намерение. Но не получилось. Может ли кто-нибудь помочь?

Solutions Collecting From Web of "Тестовый тест эспрессо"

У меня была такая же проблема, и я решил ее использовать, используя IntentsTestRule вместо ActivityTestRule . IntentsTestRule является подклассом ActivityTestRule . Настройте свой @Rule который создает такую ​​активность:

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

Используйте IntentsTestRule вместо ActivityTestRule при использовании Espresso-Intents. 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(); }