[英]Mockito cannot mock/spy because : - final class
我是 viewmodel 中的一個簡單的 function getCreditReport 我正在嘗試創建一個 API 調用存儲庫層我想在 viewmodel 中測試 getCreditReport 以檢查是否調用了 thge 存儲庫但我收到以下錯誤
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class com.example.clearscore.data.DataRepository
Mockito cannot mock/spy because :
- final class
我試過的
MainActivityViewModel
class MainActivityViewModel @Inject constructor(
//private val retroServiceInterface: RetroServiceInterface,
private val dataRepository: DataRepository
) : ViewModel() {
var creditReportLiveData: MutableLiveData<CreditReport>
init {
creditReportLiveData = MutableLiveData()
}
fun getCreditReportObserver(): MutableLiveData<CreditReport> {
return creditReportLiveData
}
fun getCreditReport() {
viewModelScope.launch(Dispatchers.IO) {
try {
val response = dataRepository.getCreditReport()
creditReportLiveData.postValue(response)
Log.d("data", response.toString())
} catch (e: IOException) {
Log.d("data", e.toString())
}
}
}
}
資料庫
class DataRepository @Inject constructor(
private val retroServiceInterface: RetroServiceInterface
) {
suspend fun getCreditReport(): CreditReport {
return retroServiceInterface.getDataFromApi()
}
}
單元測試
@RunWith(MockitoJUnitRunner::class)
class MainActivityViewModelTest {
@Mock
private lateinit var dataRepository: DataRepository
@Mock
private lateinit var mainActivityViewModel: MainActivityViewModel
@Test
fun getCreditReport() {
runBlocking {
mainActivityViewModel.getCreditReport()
verify(dataRepository).getCreditReport()
}
}
}
依賴注入組件 - 如果這有幫助
@Singleton
@Component(modules = [RetroModule::class])
interface RetroComponent {
fun inject(mainActivityViewModel: MainActivityViewModel)
fun getMainactivityViewModel(): MainActivityViewModel
}
請建議我做錯了什么
謝謝 R
請嘗試添加此依賴項
testImplementation "org.mockito:mockito-inline:3.11.2"
[添加以幫助偶然發現此問題的未來人們]
在我的情況下, class 不需要是最終的,所以我只是從 class 聲明中刪除了final
的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.