我想测试一个Fragment。我创建了一个测试Activity,将此片段添加到其中并运行一些Espresso测试。
然而,Espresso在Fragment中找不到任何视图。它转储了视图层次结构,并且全部为空。
我不想将Fragment嵌入到测试Activity中。我只想单独测试Fragment。有人这样做过吗?有没有包含类似代码的示例?
@RunWith(AndroidJUnit4.class)
class MyFragmentTest {
@Rule
public ActivityTestRule activityRule = new ActivityTestRule<>(
TestActivity.class
);
@Test
public void testView() {
MyFragment myFragment = startMyFragment();
myFragment.onEvent(new MyEvent());
// MyFragment has a RecyclerView
// onEvent is an EventBus callback that contains no data in this test
// I want the Fragment to display an empty list text and hide the RecyclerView
onView(withId(R.id.my_empty_text)).check(matches(isDisplayed()));
onView(withId(R.id.my_recycler)).check(doesNotExist()));
}
private MyFragment startMyFragment() {
FragmentActivity activity = (FragmentActivity) activityRule.getActivity();
FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
MyFragment myFragment = new MyFragment();
transaction.add(myFragment, "myfrag");
transaction.commit();
return myFragment;
}
}
5条答案
按热度按时间ekqde3dh1#
我将以如下方式创建ViewAction:
然后使用下面的命令启动应该在UI线程中运行的代码
以下是添加片段视图层次结构的测试用例示例
h4cxqtbf2#
您可以从UI线程启动您的片段,如上所述。
yquaqz183#
您可以使用
androidx.fragment:fragment-testing
库。在测试方法中启动片段非常简单:您可以在Test your fragments Android开发者指南中找到有关此库的更多信息。
l3zydbqr4#
您可以使用FragmentTestRule。
而不是常规的
ActivityTestRule
,你必须用途:你可以找到more details in this blog post。
iaqfqrcu5#
你可能忘了在视图层次结构中注入片段。尝试在
TestActivity
布局中定义片段的保持器容器(比如id为fragment_container
的FrameLayout
),然后使用add(R.id.fragment_container, myFragment, "tag")
(this method)代替add(myFragment, "tag")
。我猜你也可以使用具有相同签名的replace
方法。