【发布时间】:2023-03-04 11:30:01
【问题描述】:
我有以下使用 Dagger 注入其字段的 LoginFragment:
class LoginFragment : DaggerFragment() {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this, viewModelFactory)
.get(LoginViewModel::class.java)
}
根据 Google 的文档,我还有一个模拟 LoginViewModel 的相应测试:“您可以创建片段并为其提供模拟 ViewModel。”
@MediumTest
@RunWith(AndroidJUnit4::class)
class LoginFragmentTest {
@Mock
private lateinit var viewModel: LoginViewModel
@Before
fun setUp() {
loginFragment = LoginFragment()
loginFragment.viewModelFactory = createMockViewModelFactory(viewModel)
activityRule.activity.setFragment(loginFragment)
}
}
问题是,当调用fragment的onAttached方法时,Dagger用自己的对象覆盖了viewModelFactory,从而替换了我的mock。
如何防止 Dagger 覆盖我的模拟对象?
【问题讨论】:
标签: android unit-testing mockito dagger-2