Mockito 无法模拟/间谍,因为: - 最后一课

2024-01-13

我是 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

我尝试过的

主活动视图模型

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
}

请建议我做错了什么

Thanks R


请尝试添加此依赖项

testImplementation "org.mockito:mockito-inline:3.11.2"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mockito 无法模拟/间谍,因为: - 最后一课 的相关文章

随机推荐

  • Linux 中如何给线程命名? [复制]

    这个问题在这里已经有答案了 我有一个用 C C 编写的多线程 Linux 应用程序 我有为我的线程选择名称 https stackoverflow com questions 149932 naming conventions for th
  • Java正则表达式跳过匹配

    我有一些文字 我想提取不以标点符号分隔的单词对 这是代码 n grams Pattern p Pattern compile a z if n 2 p Pattern compile a z a z if n 3 p Pattern com
  • 如何在supervisor中添加延迟到受监督进程 - linux

    我添加了一个使用 python cassandra 库的 Bottle 服务器 但它存在以下错误 Bottle FATAL Exited too quickly process log may have details 日志显示 File
  • Android JNI 本机 C 函数调用杀死活动

    什么有效 我有一个运行 TUN TAP 服务的 c 可执行文件 以及两个在终端中运行良好的 shell 脚本 用于配置 ip 路由 和 iptables 全部以 root 身份运行 什么不起作用 我正在尝试创建一个 Android 应用程序
  • 如何在 Python 中提取字符串中的列表?

    我使用 Pandas 导入了 CSV 并用字符串条目读入了一列 检查本系列 专栏 的条目 我发现它们实际上应该是列表 例如 df A pd Series entry11 entry21 entry22 entry31 entry32 我想从
  • Windows批处理文件中的一个数字既大于又小于另一个

    我的批处理文件中有以下代码 if bakfilesize geq freespacet echo baksize is larger if bakfilesize leq freespacet echo baksize is smaller
  • 如何在服务生成器类中添加http拦截器

    我创建了一个单独的服务生成器类 如本指南所示https futurestud io tutorials retrofit 2 manage request headers in okhttp interceptor https future
  • 如何将 CSRF 令牌设置为不同的上下文路径

    我们基于 Angular 的 Web 应用程序与在不同域和上下文路径上运行的企业门户集成 我正在使用基于 Spring Security 的 CSRF 令牌来验证传入请求 该应用程序在本地完美运行 但当我将其与门户集成时 所有 post 调
  • pg_dump 串行数据类型问题

    有人可以向我解释一下为什么使用以下脚本创建 PostgreSQL 表 CREATE TABLE users id serial NOT NULL name character varying 150 NOT NULL surname cha
  • 开发 API - 如何确保其安全? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我将读取和写入方法放在数据库中 并通过 URL 公开它们 我使用 CodeIgniter 框架并使用 URL 段将参数传递给这些方法
  • 将文件复制到 FTP 并以今天的日期存档

    我需要创建一个执行以下操作的脚本 将文件夹中的所有文件复制到 FTP 站点 如果复制成功 则将文件移至存档 存档应该是一个新创建的文件夹 具有今天的日期 这样我们就知道它们何时被传输 我试图蚕食其他脚本来让某些东西发挥作用 但我没有取得任何
  • docker ubuntu /bin/sh: 1: locale-gen: 未找到

    我将下面的区域设置代码放入我的 dockerfile 中 FROM node 4 onbuild Set the locale RUN locale gen en US UTF 8 ENV LANG en US UTF 8 ENV LANG
  • 如何在返回 SELF 的函数的 pl/sql 对象类型中链接调用

    我想让一个 oracle 对象返回自身并能够链接这些调用 我怎么做 我尝试返回相同的类型 但它不起作用 我还尝试添加一个由函数调用的过程 但它也不起作用 总是抱怨修改宽度成员的值 看起来函数不会产生副作用 它们是按照更数学的函数原理建模的吗
  • 使用QUdpSocket发送数据报

    我正在尝试使用 QUdpSocket 发送数据报 以下是我正在使用的代码 udpSocket new QUdpSocket this QByteArray datagram Message udpSocket gt writeDatagra
  • 将数据拟合到所有可能的分布并返回最佳拟合[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个样本数据 我想获得最佳拟合分布 我有几个链接建议我可以从以下位置导入发行版scipy stats 但是我事先并不知道数据的类型 我
  • Hibernate/MySQL并发问题

    我得到一个极其奇怪的结果使用 Hibernate 4 1 9 Final 和 MySQL 14 14 Distrib 5 5 29 InnoDB 表 当我使用一个线程将某些内容持久保存到数据库并尝试使用另一个线程获取它时 Hibernate
  • FromStr 特征不暴露生命周期的原因是什么?

    Rust FromStr 特征是这样定义的 pub trait FromStr type Err fn from str s str gt Result
  • 如何在 App Inventor 中打开网页

    我有一个网络查看器 它是主要应用程序 网络查看器下方是一个按钮 我想在单击按钮时在用户的网络浏览器中打开一个网页 如何在 App Inventor 中执行此操作 Action android intent action VIEW DataU
  • R 中未使用的参数

    是否可以让软件忽略模块运行时定义了未使用的参数这一事实 例如我有一个模块multiply a b 它返回的乘积a and b 如果我像这样调用模块 我会收到错误 multiply a 20 b 30 c 10 返回错误似乎有点不必要 因为所
  • Mockito 无法模拟/间谍,因为: - 最后一课

    我是 viewmodel 中的一个简单函数 getCreditReport 我试图在其中进行 API 调用存储库层 我想在 viewmodel 中测试 getCreditReport 以检查是否调用了 thge 存储库 但出现以下错误 or