我正在尝试使用FragmentScenario测试一个片段。该片段有自己的菜单,动作栏上有一个添加图标,点击此菜单项会启动一个子片段,用户可以从中添加新项目。所以我想测试这个行为。然而,正如您所知,FragmentScenario在EmptyFragmentActivity中启动片段,而不是启动实际的主机活动。由于动作栏不是片段布局的一部分,而属于主机活动,因此在测试过程中动作栏和菜单甚至不可见。那么我该如何测试与菜单的交互呢?
我从官方文档中找到了这条信息:
如果您需要调用片段本身的方法,例如响应选项菜单中的选择,您可以通过实现FragmentAction来安全地执行此操作。
然而,如何将正确的项目传递给onOptionsItemSelected回调函数?我尝试将addMenuItem定义为成员变量,并在onCreateOptionsMenu中初始化它,但它返回null。在测试期间似乎并没有调用onCreateOptionsMenu。因此,我不知道如何测试菜单与用户的交互。
我从官方文档中找到了这条信息:
如果您需要调用片段本身的方法,例如响应选项菜单中的选择,您可以通过实现FragmentAction来安全地执行此操作。
@RunWith(AndroidJUnit4::class)
class MyTestSuite {
@Test fun testEventFragment() {
val scenario = launchFragmentInContainer<MyFragment>()
scenario.onFragment(fragment ->
fragment.onOptionsItemSelected(clickedItem) {
//Update fragment's state based on selected item.
}
}
}
}
然而,如何将正确的项目传递给onOptionsItemSelected回调函数?我尝试将addMenuItem定义为成员变量,并在onCreateOptionsMenu中初始化它,但它返回null。在测试期间似乎并没有调用onCreateOptionsMenu。因此,我不知道如何测试菜单与用户的交互。