首页 > 解决方案 > 如何用 Hilt 模拟注入的对象?

问题描述

考虑下面的例子

@Singleton
class LoginModel @Inject contractor(private val userModel:UserModel){

}

@Config(application = HiltTestApplication::class)
@HiltAndroidTest
class LoginModelTest {

    @get:Rule
    var hiltRule = HiltAndroidRule(this)

    @Inject
    lateinit var loginModel: LoginModel

    @Before
    open fun setup() {
        hiltRule.inject()
    }
}

如何在不手动构建UserModel的情况下模拟内部?LoginModel LoginModel

标签: androidkotlin

解决方案


解决方案很简单。您必须提供两个不同版本的 UserModel - 生产和模拟测试。您可以按照以下步骤操作。

  1. 通过 hilt 模块提供 UserModel,通过 Inject 注释是不够的
  2. 根据您的需求:

仅在单个测试表中替换该模块https://developer.android.com/training/dependency-injection/hilt-testing#replace-binding-manually

或者

在所有测试中替换 https://developer.android.com/training/dependency-injection/hilt-testing#replace-binding

在这两种情况下,您最终都会得到在绑定中返回模拟的模块。

干杯


推荐阅读