如何用Fragment Scenario测试Fragment?

How to test Fragment with Fragment Scenario?

我正在尝试单独测试 Fragment。为此,我正在尝试 FragmentScenario.

Android Documentation 在这里提供了一个很好的例子。但是我的测试总是失败,因为我的片段将 activity 转换为 onAttach.

的接口

FragmentScenario 启动了一个容器 Activity,它(显然)没有实现我的片段所需的接口。

我的问题是如何解决这个问题?如何强制容器 activity 实现我需要的接口?或者有更好的方法吗?也许删除 onAttach 上的转换并替换为不同的方法?

使用挂钩分配成员、扩展片段、覆盖挂钩以提供该接口的模拟。如果不是,请使用 DI 将其注入 public 成员并直接分配一个模拟。

class MainFragment : Fragment {

   override fun onAttach(context:Context) {
       mViewInterface = provideViewInterface()
   }

   protected fun provideViewInterface() = activity
}

class TestMainFragment:MainFragment() {
   override fun provideViewInterface() = mock()
}

我采取了不同的方法。我最终将 ActivityScenario 用于具有 Activity 回调的片段。

在我的开发版本中创建了一个 AccountTestActivity。 activity 从我想要测试的片段中实现了我所有的各种回调(LoginCallback、CreateAccountCallback 等)。

我不想打开我的 类 进行测试或添加额外的功能。

scenario = ActivityScenario.launch(AccountTestActivity::class.java).onActivity {
        logInFragment = LogInFragment()
        it.startFragment(logInFragment)
    }