robolectric - 如何使用 AndroidX 片段测试来测试选项菜单?
问题描述
设置
- 机器人电动车:4.2.1
- AndroidX 片段测试:1.1.0-alpha05
背景
AndroidX 带来了测试片段的新方法:
来源: https ://developer.android.com/training/basics/fragments/testing
Robolectric 与 AndroidX 兼容,并打算弃用反映 AndroidX 功能的功能。
来源: http ://robolectric.org/androidx_test/
但是在 Robolectric 中,您可以测试选项菜单的行为,例如使用类似这样的东西(我知道它看起来很混乱,但 FragmentController 在某些情况下不能很好地工作):
@Test
public void OnPrepareOptionsMenu_WhenX_ShowsMenuActionsCorrectly() {
setupX();
final Bundle instanceState = new Bundle();
instanceState.putString(FooActivity.ARG_UUID, x.getUuid());
final FooActivity activity = Robolectric.buildActivity(FooActivity.class)
.create(instanceState).start().visible().get();
activity.getSupportFragmentManager().beginTransaction()
.add(R.id.container_x_fragment_details, fragment).commit();
final Context context = fragment.requireContext();
final Menu menu = new RoboMenu(context);
fragment.onCreateOptionsMenu(menu, new MenuInflater(context));
fragment.onPrepareOptionsMenu(menu);
assertThat(menu.findItem(R.id.action_y).isVisible(), is(true));
assertThat(menu.findItem(R.id.action_z).isVisible(), is(true));
}
在 AndroidX 中执行类似操作(不使用 espresso)的 API 是什么?该RoboMenu
构造似乎不适用于 AndroidX,这不起作用:
fragmentScenario.onFragment(fragment -> {
final Activity activity = fragment.requireActivity();
assertThat(activity.findViewById(R.id.y).getVisibility(), is(View.VISIBLE));
assertThat(activity.findViewById(R.id.z).getVisibility(), is(View.VISIBLE));
});
解决方案
推荐阅读
- pyspark - 使用数据框在 pyspark 中实现 Louvain
- html - 我无法在我的 html 代码中更改表格中特定单元格/列的宽度
- java - 从 Maven 远程存储库中删除版本
- c++ - 以向量为键的 C++ 映射。如何使其矢量顺序无关紧要?
- c - GDB 有用户标识吗?
- json - 如何在颤动中获得 JSON 映射的第一个值?
- angular - Angular9:获取找不到“对象”类型的不同支持对象“[对象对象]”。NgFor 仅支持绑定到 Iterables,例如 Arrays
- javascript - 如何在 React + Babel 中允许异步函数?
- angular - 当我在表单中按下不同的按钮时执行 onSubmit 方法
- r - 查找 R 中 2 个数据帧中 2 个变量的匹配项与容差的交集