You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Hilt时如何模拟注入对象,无需手动构造目标类实例?

解决方案

你可以通过 Hilt 测试框架提供的 @BindValue 注解直接替换依赖图中的 UserModel 实现,无需手动构造 LoginModel 实例,具体操作如下:


前置依赖

确保你已引入Hilt测试核心包、Mock框架(以MockK为例,也可使用Mockito等其他Mock工具)。

实现逻辑

@BindValue 会将你自定义的实例绑定到Hilt依赖图中,自动替换原有的UserModel正式实现,Hilt注入LoginModel时会直接使用你创建的模拟实例。

完整测试代码示例

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

    @get:Rule
    var hiltRule = HiltAndroidRule(this)

    // 核心配置:将模拟的UserModel绑定到Hilt依赖图
    @BindValue
    val mockUserModel: UserModel = mockk(relaxed = true)

    @Inject
    lateinit var loginModel: LoginModel

    @Before
    open fun setup() {
        // 可提前配置模拟对象的方法返回逻辑
        every { mockUserModel.checkAccountValid(any(), any()) } returns true
        
        hiltRule.inject()
    }

    @Test
    fun testLoginSuccess() {
        // 此时loginModel内部注入的userModel就是上面的mockUserModel
        // 直接编写测试逻辑即可,无需手动构造LoginModel
    }
}

备选方案(适用于自定义Module场景)

如果你的UserModel是通过自定义Hilt Module提供的,也可以选择先通过 @UninstallModules(你的UserModule::class) 卸载原生产环境Module,再编写测试专用的Module提供模拟UserModel实例,该方案适合需要批量替换多个依赖的场景。

内容的提问来源于stack exchange,提问作者Ilya Gazman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:36:03