unit-testing - 无法模拟方法 - 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)
}
解决方案
我不认为间谍是你想要的,我认为你想要一个模拟。试试这个
@Test
fun `upliftedVolumeUpdated abcd` () {
val qualityControlDataProviderMock = mock<QualityControlChecksDataProvider> {
on { getQualityControlCheckDataForUplift(any(), any()) } doReturn qualityControlChecks
}
}
推荐阅读
- javascript - 试图做到这一点,如果选择了下拉列表中的第三个选项,那么文本框将被禁用并会出现一个新框
- django - Django 最佳实践将 REST API 与 Web 应用程序结合起来还是将两者分开?
- json - 将 dict 转换为序列化程序时,Django 中的 serializer.is_valid 始终为 False
- dataweave - 将日期格式从 Oracle DB 转换为 SFDC
- javascript - 基本关闭示例混淆
- rust - 产生线程并保留来自它们的数据
- python - Statmodels 输出不同于 sklearn 回归
- php - 如何按字母顺序对数组进行排序,其中前缀首先显示而不是最后显示?
- flutter - 为大量听众优化的 ChangeNotifier 的替代方案?
- python - ModuleNotFoundError:没有名为“cal”的模块