簡體   English   中英

Mockito 無法模擬/監視,因為:-最終 class

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM