如何用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)
}
我正在尝试单独测试 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)
}