Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在活动中注入模拟类?_Android_Android Espresso_Dagger - Fatal编程技术网

Android 如何在活动中注入模拟类?

Android 如何在活动中注入模拟类?,android,android-espresso,dagger,Android,Android Espresso,Dagger,我想问,在活动中模拟字段注入类的一般规则是什么 例如,假设我的活动中注入了视图模型。让我们假设它不是架构组件库中的VM,而是我们的自定义类(使用构造函数注入)。在运行Espresso测试时,我不想注入实际的类及其依赖项,但我更希望提供模拟的VM 下面是一些代码片段 主要活动: class MainActivity : AppCompatActivity() { @Inject internal lateinit var viewModel: MainActivityViewMo

我想问,在活动中模拟字段注入类的一般规则是什么

例如,假设我的活动中注入了视图模型。让我们假设它不是架构组件库中的VM,而是我们的自定义类(使用构造函数注入)。在运行Espresso测试时,我不想注入实际的类及其依赖项,但我更希望提供模拟的VM

下面是一些代码片段

主要活动:

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