如何对扩展 AndroidViewModel 的 ViewModel 进行单元测试。构造函数中的应用程序出现问题

问题描述 投票:0回答:2

所以我必须编写单元测试,并且需要测试我的 ViewModel。

我有一个基本 ViewModel,并且 BaseViewModel 扩展了 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 并创建一个将应用程序上下文传递给我的 ViewModel 的工厂。但最终,每当我尝试创建 ViewModel 的实例时,我都会遇到同样的问题。

有人有一个我可以遵循的例子来测试这个吗?或者我必须进行仪器测试而不是单元测试?

我对测试非常陌生,所以也许我没有正确地做事,任何帮助都会很棒。

谢谢

android unit-testing testing mvvm viewmodel
2个回答
1
投票

此处所述:

Mockito.mock(Application::class.java)

0
投票

在 Mockito 的帮助下,您可以模拟应用程序实例。

@Before
fun setUp() {
    val application = Mockito.mock(Application::class.java)
    viewModel = LoginViewModel(application, FakeAppRepositoryImpl())
}

不要忘记添加依赖项:

testImplementation("org.mockito:mockito.core:4.0.0")    
testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0") // kotlin extension
© www.soinside.com 2019 - 2024. All rights reserved.