首页 > 解决方案 > 无法模拟方法 - Mockito - Kotlin

问题描述

我正在尝试模拟一种方法 (getQualityControlCheckDataForUplift(ArgumentMatchers.any(), ArgumentMatchers.anyFloat())) 以返回我在测试用例中定义的 qcchecks,但出现错误。

请对我做错的地方提出任何建议

org.mockito.exceptions.base.MockitoException: Unable to create mock instance of type 'QualityControlChecksDataProvider'

质量控制检查数据提供者

class QualityControlChecksDataProvider @Inject constructor(
    private val offlineDataStorage: OfflineDataStorage,
    private val app: App
) {
    private val mapOfQCChecksForMilestone = LinkedHashMap<String, ArrayList<QualityControlCheck>?>()

 fun getQualityControlCheckDataForUplift(qualityControlMilestone: QualityControlMilestone, uplift: Float):
        ArrayList<QualityControlCheck>? {
        val qcChecksForUplift: ArrayList<QualityControlCheck>? = ArrayList()
        val qcChecksForMilestone = mapOfQCChecksForMilestone[qualityControlMilestone.milestoneText]
        qcChecksForMilestone?.forEach {
            if (it.uplift == uplift) qcChecksForUplift?.add(it)
        }
        return qcChecksForUplift
    }

}

在我的单元测试中,这就是我试图模拟的方式

@Test
    fun `upliftedVolumeUpdated abcd` () {

  val qualityControlCheckDataProvider = spy(QualityControlChecksDataProvider::class.java)
        every(qualityControlCheckDataProvider.getQualityControlCheckDataForUplift(ArgumentMatchers.any(), ArgumentMatchers.anyFloat())).thenReturn(qualityControlChecks)
}

标签: unit-testingkotlinmockingmockito

解决方案


我不认为间谍是你想要的,我认为你想要一个模拟。试试这个

@Test
fun `upliftedVolumeUpdated abcd` () {
    val qualityControlDataProviderMock = mock<QualityControlChecksDataProvider> {
        on { getQualityControlCheckDataForUplift(any(), any()) } doReturn qualityControlChecks
    }
}

推荐阅读