android - Mockito 无法模拟/监视,因为 : - final class

标签 android unit-testing kotlin mockito

我是 viewmodel 中的一个简单函数 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()
        }
    }
}
依赖注入(inject)组件 - 如果这有帮助
@Singleton
@Component(modules = [RetroModule::class])
interface RetroComponent {

    fun inject(mainActivityViewModel: MainActivityViewModel)

    fun getMainactivityViewModel(): MainActivityViewModel
}
请建议我做错了什么
谢谢
R

最佳答案

请尝试添加此依赖项

testImplementation "org.mockito:mockito-inline:3.11.2"

关于android - Mockito 无法模拟/监视,因为 : - final class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68840524/

相关文章:

android - 如何通过 SimpleXML 解析 XML

java - JFC 单元测试教程/示例

c# - MSTest.TestAdapter 与 MSTest.TestFramework 之间有什么区别,我什么时候需要哪一个?

spring - 如何从授权中获取jwt token

unit-testing - kotlin + Spring boot 中的单元测试休息 Controller

java - 如何将String类发送到android中的Activity

java - 进行查询以检索每个大陆的国家/地区 Firebase 实时数据库

android - setcontent View 不工作

php - android中的asyncTask用于从MySQL数据库检索数据

java - Mockito 模拟构造函数示例