如何对继承AndroidViewModel的ViewModel进行单元测试。 在构造函数中遇到应用程序问题。

5

我需要编写单元测试并测试我的ViewModel。我有一个基础ViewModel,它继承了AndroidViewModel。我之所以扩展AndroidViewModel是为了可以在Dagger中使用上下文。

这是我的BaseViewModel。

public class BaseViewModel extends AndroidViewModel {

protected @Inject SharedPreferencesHelper sharedPreferencesHelper;

public BaseViewModel(@NonNull Application application) {
    super(application);

    //Only inject sharedPreferences since it is used in almost all of the VMs.
    ((CommissioningApplication) getApplication()).getAppComponent().inject(this);
}

我在单元测试中创建ViewModel实例时遇到了问题。尝试了很多方法,但都没有成功。

我考虑过继承ViewModel而不是AndroidViewModel,并创建一个工厂将应用程序上下文传递给我的ViewModels。但最终,无论何时我尝试创建ViewModel的实例,我都会遇到相同的问题。

是否有人有示例可供我参考如何进行测试?还是说我需要进行Instrumented测试而不是单位测试?

我对测试非常陌生,所以可能做得不正确,请帮忙指导。

谢谢


为什么使用字段注入而不是构造函数注入?我认为构造函数注入更适合这种情况。 - Sandy Lin
@SandyLin 我最终创建了一个ViewModelFactory,并将其注入到我的activity/fragment中。该工厂负责为viewmodel提供所需的内容。最终,我也放弃了AndoridViewModel并转向了ViewModel。 - huey77
1个回答

1
如下所述这里

Mockito.mock(Application::class.java)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接