0

我有安卓应用程序。我正在使用片段场景编写测试来测试我的片段。我的测试很简单,看起来像这样:

FragmentScenario.launchInContainer(ShoppingPlanningFragment.class);
...
onView(withId(R.id.buttonRemove)).perform(click());

所以我点击了一些按钮,当点击这个按钮时,小吃栏是这样的:

Snackbar snackbar = Snackbar.make(getActivity().findViewById(R.id.planning_mode_layout), msg, Snackbar.LENGTH_LONG);

但我收到以下错误:

androidx.test.espresso.PerformException:在视图“id 为 com.gitlab.robert.cebula.expirydate:id/buttonRemove”上执行“单击 - 在坐标:809、1949 和精度:16、16”时出错。在 androidx.test.espresso.PerformException$Builder.build(PerformException.java:5) 在 androidx.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:25) 在 androidx.test.espresso.base.DefaultFailureHandler.handle (DefaultFailureHandler.java:36) 在 androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:106) 在 androidx.test.espresso.ViewInteraction.desugaredPerform(ViewInteraction.java:43) 在 androidx.test.espresso.ViewInteraction。在 com.example.expirydate.shoppingfragment.planningfragment.ShoppingPlanningFragmentTest 执行(ViewInteraction.java:94)。

如果我评论小吃店的创建,一切都会按预期工作。这里有什么问题,我该如何解决?

4

2 回答 2

0

用于制作小吃店的视图。这应该包含在您要显示小吃栏的视图层次结构中。通常它可以是被交互的视图来触发snackbar,例如被点击的按钮,或者被刷的卡片。

val contextView = findViewById<View>(R.id.context_view)

Snackbar.make(contextView, R.string.text_label, Snackbar.LENGTH_SHORT)
    .show()

错误堆栈中的重要点。

#41: Error inflating class android.widget.Button Caused by: android.view.InflateException: Binary XML file line #41: Error inflating class android.widget.Button

请检查xml代码。

于 2021-01-16T16:43:16.590 回答
0

FragmentScenario 单独测试您的片段,并且它也与其宿主活动隔离这意味着,它不会启动您的主机活动,而是启动EmptyFragmentActivity。因此,当您致电时:

getActivity().findViewById(R.id.planning_mode_layout)

它找不到该视图,因为它不使用您的主机活动。

解决方案:您要么更改应用程序的结构以使片段独立于其宿主活动,要么不使用 FragmentScenario 测试此行为。

于 2021-01-26T09:11:47.207 回答