在测试中禁用Dagger注入

问题描述 投票:3回答:1

我有以下LoginFragment使用Dagger注入其字段:

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)
    }
}

问题是,当调用片段的onAttached方法时,Dagger用自己的对象覆盖viewModelFactory,从而替换我的模拟。

如何防止Dagger覆盖我的模拟对象?

android unit-testing mockito dagger-2
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.