我正在為使用 Glide 從服務器獲取影像的 viewModel 撰寫單元測驗。代碼如下:
視圖模型.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
}
}
在運行測驗時,執行滑行時我得到 NULL POINTER EXCEPTION。錯誤是
java.lang.NullPointerException
at com.bumptech.glide.load.engine.cache.MemorySizeCaculator.isLowMemoryDevifce(MemorySizeCalculator.java:124)
我假設我收到此錯誤是因為我需要模擬 Glide 物件。在測驗中執行 repository.getImage() 時,如何擺脫此錯誤并僅回傳模擬位圖/空影像?
uj5u.com熱心網友回復:
您實際上并沒有模擬您正在使用的存盤庫,因為您在 viewModel 中創建了該存盤庫。
為了模擬存盤庫,您必須將其注入視圖模型,然后您可以在測驗中使用模擬的存盤庫。
class MyViewModel(private val repository: Repository) : ViewModel() {
...
然后在您的測驗中注入模擬存盤庫:
@Test
fun testLoadedState() {
runBlockingTest {
val viewModel = ViewModel(mockRepository)
whenever(mockRepository.getImage("")).thenReturn(mockedDrawable)
... rest of the test
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/460513.html
下一篇:假設庫:補充一些其他策略的策略
