我正在为一个viewModel编写单元测试,这个viewModel使用Glide从服务器获取一个图像。代码如下:
查看模型.kt
class MyViewModel : ViewModel() {
val repository = Repository()
fun updateState() {
viewModelScope.launch {
val drawable = repository.getImage("google.com")
withContext(Dispatchers.Main()) {
if(drawable != null) _liveData.value = LoadedState
}
}
}
}
存储库:
class Repository {
fun getImage(url: String) {
return Glide.with(appContext).asDrawable().load(url).submit().get()
}
}
测试:
@Test
fun testLoadedState() {
runBlockingTest {
whenever(repository.getImage("")).thenReturn(mockedDrawable)
... rest of the test
}
}
在运行测试时,当glide被执行时,我得到NULL POINTER EXCEPTION。
java.lang.NullPointerException
at com.bumptech.glide.load.engine.cache.MemorySizeCaculator.isLowMemoryDevifce(MemorySizeCalculator.java:124)
我想我得到这个错误是因为我需要模拟Glide对象。我如何才能摆脱这个错误,并在测试中执行repository.getImage()时只返回一个模拟位图/空图像?
1条答案
按热度按时间guicsvcw1#
您实际上并不是在模仿您正在使用的存储库,因为您是在viewModel中创建该存储库的。
为了模拟存储库,您必须将其注入视图模型中,然后您可以在测试中使用模拟的存储库。
然后在测试中注入模拟的存储库: