如何模拟使用 dagger hilt 注入的视图模型进行 android 测试

mar*_*yam 5 android mockito android-testing dagger-hilt

dagger hilt在我的项目中使用。我想写UI test一些片段。我需要viewModel在测试类中模拟 并将其与测试下的片段相关联.. 我阅读了dagger hilt文档,但没有找到任何解决方案。

   class HomeViewModel @ViewModelInject constructor(
    private val repository: MainRepository,
    prefManager: PrefManager,
    private val firebaseAnalytics: FirebaseAnalytics,
    @Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
 /////
}

    @AndroidEntryPoint
class HomeFragment : BaseFragment() {

    private val viewModel: HomeViewModel by viewModels()
/////
}
Run Code Online (Sandbox Code Playgroud)

Lev*_*yan 2

如果您的目标是使用模拟数据测试片段,则不必模拟视图模型;相反,您可以在 dagger 模块中提供模拟存储库实现:

@Module
@TestInstallIn(
    components = SingletonComponent::class,
    replaces = ProdRepositoryModule::class
)
interface FakeRepositoryModule {
  @Binds fun bind(impl: FakeRepository): MainRepository
}
Run Code Online (Sandbox Code Playgroud)

运行 UI 测试时,这会将模块中提供的所有绑定替换ProdRepositoryModule为模块中提供的绑定FakeRepositoryModule。查看Hilt 测试文档以获得进一步帮助。