Android 如何在活动中注入模拟类?
我想问,在活动中模拟字段注入类的一般规则是什么 例如,假设我的活动中注入了视图模型。让我们假设它不是架构组件库中的VM,而是我们的自定义类(使用构造函数注入)。在运行Espresso测试时,我不想注入实际的类及其依赖项,但我更希望提供模拟的VM 下面是一些代码片段 主要活动:Android 如何在活动中注入模拟类?,android,android-espresso,dagger,Android,Android Espresso,Dagger,我想问,在活动中模拟字段注入类的一般规则是什么 例如,假设我的活动中注入了视图模型。让我们假设它不是架构组件库中的VM,而是我们的自定义类(使用构造函数注入)。在运行Espresso测试时,我不想注入实际的类及其依赖项,但我更希望提供模拟的VM 下面是一些代码片段 主要活动: class MainActivity : AppCompatActivity() { @Inject internal lateinit var viewModel: MainActivityViewMo
class MainActivity : AppCompatActivity() {
@Inject
internal lateinit var viewModel: MainActivityViewModel
override fun onCreate(savedInstanceState: Bundle?) {
DaggerMainActivityComponent.factory()
.create(this)
.inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
MainActivityViewModel:
@Mockable
class MainActivityViewModel @Inject constructor(
private val repo: MainActivityRepo
) {
...
}
维护活动测试:
class MainActivityTest {
@get:Rule
val activityRule = IntentsTestRule(
MainActivity::class.java,
false,
true
)
private val mainActivityViewModel = mock<MainActivityViewModel>()
@Before
fun setup() {
activityRule.activity.viewModel = mainActivityViewModel
}
fun someMocking() {
whenever(mainActivityViewModel...)
.thenReturn(...)
}
}
类维护活动测试{
@获取:规则
val activityRule=IntentsTestRule(
MainActivity::class.java,
假,,
真的
)
private val mainActivityViewModel=mock()
@以前
趣味设置(){
activityRule.activity.viewModel=mainActivityViewModel
}
有趣的嘲弄{
无论何时(mainActivityViewModel…)
.然后返回(…)
}
}
如果有人能给出反馈,或者建议更好的实现,那就太好了。谢谢。上述代码是否有效?是否有效。我关心的是:有没有一种方法可以“注入”这个模拟,而不是手动创建它并在设置步骤中分配?如果您使用注入框架,那么是的,您可以,但它需要相当多的时间setup@Blundell你能指定框架吗?试试Koin