Почему активность не запускается при нажатии на элемент RecyclerView в тесте Espresso / Robolectric android? - PullRequest
0 голосов
/ 19 июня 2019

Я пишу тест в Android Espresso, который должен, после нажатия на элемент в утилите, открыть подробное описание элемента (начать новое действие). Все отлично работает на устройстве. Если я попытаюсь запустить этот тест с Robolectric, второе действие не будет запущено.

FirstActivity создается с помощью:

@Rule
public ActivityScenarioRule<FirstActivity> activityRule = new ActivityScenarioRule<>(FirstActivity.class);

При щелчке слушатель начинает второе действие с:

activity.startActivity(new Intent(activity, SecondActivity.class).putExtra(PARAM_ID, paramId));

Проблема возникает, когда я пытаюсь запустить второе действие, щелкнув элемент в RecyclerView:

onView(withId(R.id.recyclerview_messages)).check(matches(isDisplayed())).perform(RecyclerViewActions.actionOnItemAtPosition(idx, click()));

Хотя эта строка не возвращает никакой ошибки, проверьте, завершилось ли действие, завершается с ошибкой:

onView(withId(R.id.relativelayout_messages_detail)).check(matches(isDisplayed()))

androidx.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: my.project.app.test:id/relativelayout_messages_detail
at java.lang.Thread.getStackTrace(Thread.java:1559)
    at androidx.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:96)
    at androidx.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:59)
    at androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:322)
    at androidx.test.espresso.ViewInteraction.check(ViewInteraction.java:306)
    at my.project.app.BaseActivityTest.checkAndGetView(BaseActivityTest.java:72)
    at my.project.app.FirstActivityTest.testMessageReadCount(FirstActivityTest.java:127)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    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 org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:546)
    at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:252)
    at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Использование:
Робоэлектрик: 4,3
Эспрессо: 3.2.0
androidx.test: 1.2.0
Android SDK: 24
Ява: 8

Может кто-нибудь указать мне правильное направление, где может быть проблема? Спасибо.

...