android - 如何用 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
解决方案
解决方案很简单。您必须提供两个不同版本的 UserModel - 生产和模拟测试。您可以按照以下步骤操作。
- 通过 hilt 模块提供 UserModel,通过 Inject 注释是不够的
- 根据您的需求:
仅在单个测试表中替换该模块https://developer.android.com/training/dependency-injection/hilt-testing#replace-binding-manually
或者
在所有测试中替换 https://developer.android.com/training/dependency-injection/hilt-testing#replace-binding
在这两种情况下,您最终都会得到在绑定中返回模拟的模块。
干杯
推荐阅读
- node.js - 构建可扩展的 SaaS 应用程序
- reactjs - 使用 socket.io 和 react hooks 时 Recact 状态没有被更新
- php - 尝试使用 PHP 创建新的 Postgres 数据库时出现“数据库不存在”
- swift - 斯威夫特:当一个引用类型常量被分配给一个变量,但该变量发生了变化时会发生什么?
- javascript - 基于给定属性的Vue渲染元素
- android - 即使授予了定位权限,Android 11 wifi SSID 在后台也是未知的
- r - 使用 R Shiny App 访问 MariaDB(在同一台服务器上)
- python-3.x - 函数内的闭包
- python - 一个入口名称具有多个规则
- html - Bootstrap Carousel Stacking/Overlaying divs/items