使用 Kotlin 和 Mockito 模拟通用接口

2023-12-31

我正在尝试使用 Mockito 模拟 Kotlin 中的通用接口。但到目前为止我还没有找到自然的解决方案。鉴于:

interface X<T> {
    fun x(): T
}

fun f(x: X<Int>) = x.x()

我可以嘲笑X具有以下任何一项:

  1. val x = f(Mockito.mock(X::class.java) as X<Int>)

    但这会产生“未经检查的演员”警告。

  2. @Mock lateinit var x: X<Int>

    但我不想使用@Mock注释,因为我喜欢将我的字段定为最终的。

  3. 引入一个辅助函数,作为Mockito-Kotlin 库 https://github.com/nhaarman/mockito-kotlin does:

    inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java)!!

    然后像这样调用它:

    val x: X<Int> = mock()

    但我不想使用辅助函数。

是否有一种优雅的纯 Kotlin 方式来使用 Mockito 模拟通用接口? (我更喜欢没有警告的 1. 版本。)


只需使用Mockito-Kotlin https://github.com/nhaarman/mockito-kotlin项目。该项目包含所有mockito 必须有的助手。并且也支持mockito 2.1。

更新。处理“未经检查的演员”使用具体化类型参数 https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters.

你说“但我不想使用辅助函数。”,但为什么呢?这是内联函数,因此在编译时函数将在所有调用站点处内联。

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

使用 Kotlin 和 Mockito 模拟通用接口 的相关文章

随机推荐

  • 算法:从一组游戏中选择成对的球队

    我正在尝试为体育联盟创建一个调度程序 我想将球队分组 以便每个球队每组进行一场比赛 我认为我正在尝试做的事情是计算机科学中现有的问题 但我不知道它叫什么 而且我很难找到有关它的信息 不管怎样 情况如下 假设我有一组团队A 1 2 3 n 以
  • 您在编写单元测试时最常犯的错误是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您在编写单元测试时最常犯的错误是什么 耦合 缺乏凝聚力 尝试一次测试太多功能 没有测试足够的功能 如果您有该错误的示例 请发布一些示例代码 根本
  • 如何防止用户代理显示无法识别的 MIME 类型的下载窗口?

    如果您设置Content Disposition标头至attachment 这会导致用户代理始终显示该文件的下载窗口 我想做与此相反的事情 强制用户代理始终直接显示响应 在这种特殊情况下 我有一个发送 JSON 的 API 我想把它作为ap
  • Flexbox 项目多行文本溢出

    我有一个弹性物品 里面有很长的绳子 我想把它包裹起来 但这不起作用 I set flex 1 1 500px 例如 flex basis 500px 并且它应该用以下内容包裹字符串word wrap break word 但事实并非如此 而
  • Kinesis 流待处理消息计数

    我正在尝试将 AWS Kinesis 流用于我们的数据流之一 我想出于操作目的监视流上的待处理消息 根据积压向下游扩展 但无法找到任何在我的流中提供 大约 待处理消息的 API 这看起来很奇怪 因为消息在 7 天后就会过期 如果生产者和消费
  • Java 程序为音频文件创建 PNG 波形

    如何使用 Java 将 Wav 文件转换为 PNG 波形图像文件 java MyProgram class path to wav file path where to write png file 预期成绩 指定路径中保存的png是传入的
  • 更改 .png 以与 JpegImagesToMovie.java 一起使用

    我正在使用 JpegImagesToMovie java 将图像转换为 mov 文件 我想知道是否可以编辑它来处理 png 文件 因为视频的质量不是很好 更改它会改善它 ImageIO write img png new File C Us
  • 何时使用define_singleton_method v Define_method

    在一个答案中这个问题 https stackoverflow com questions 19368437 how to use define method inside initialize用户 mu 太短 解释说您不希望对象的行为在初始
  • QML Row 与 RowLayout

    我正在尝试为我的应用程序编写一个顶栏 其中应主要包含应用程序徽标 小图像 和应用程序标题 仅文本 此外 我希望这个顶栏能够根据窗口的高度自动调整大小 我是 QML 新手 但我想我应该将这些组件包装在Row or a RowLayout ht
  • Swift 在 UILongPress 上保留 UISwitch 状态

    我在我的项目中添加了 UISwitch 上的 UILongPressGestureRecognizer class ViewController UIViewController UIGestureRecognizerDelegate va
  • 从 sqlite 触发器调用 Java 方法 (android)

    我想要使 用 sqlite 触发器注册回调方法 例如 public void printLog Log i TAG 1 row added 在 sqlite 中插入任何行后调用此方法 是否可以 怎么做 SQLite 提供数据变更通知回调 h
  • 使用 GWT 使用 XMLHttpRequest 发送 XML

    目前我使用 JavaScript 代码在 GWT 中发送 XML 数据 有没有更简单的方法来发送它们 sendRequest addClickHandler new ClickHandler Override public void onC
  • Swift:键盘显示时向上滚动视图

    我有一个滚动视图 我想在显示键盘时向上滚动 当键盘显示时 我因以下错误而崩溃 2014 09 29 14 48 50 738 swrd 1563 472888 swrd EditPhotoViewController KeyboardWas
  • 将参数传递给 JSF 中的视图作用域 bean

    假设我的 JSF 2 应用程序中有两个页面 第一页显示对象表 汽车或其他内容 另一个页面能够显示一个特定对象的详细信息 表页位于请求范围内 因为每次用户请求时都应重新加载对象 详细信息页面在视图范围内 因此 当我单击表格内的某个对象时 该对
  • Android 中使用 DateFormat 的 java.lang.IllegalArgumentException

    这是我的代码片段 这里的日期格式为 10 Sep 2013 09 53 37 TextView tvDate TextView convertView findViewById R id entered date DateFormat da
  • 如何在 python 3 中通过 FTP 发送 StringIO?

    我想通过 FTP 将文本字符串作为文件上传 import ftplib from io import StringIO file StringIO file write aaa file seek 0 with ftplib FTP as
  • 在 jQuery 中绑定多个事件

    我有一个自定义 jQuery 插件 它绑定了change事件到表单元素 在本例中是一些input元素 这change事件用于向其他一些组件指示发生了更改 这按其应该的方式工作 但是 我发现需要绑定一个额外的change事件相同input元素
  • 为什么 C 中不允许将数组大小作为常量变量,而 C++ 中允许?

    我试着写一个c程序如下 const int x 5 int main int arr x 1 2 3 4 5 当我尝试使用 gcc 进行编译时 会发出警告 如下所示 simple c 9 错误 可变大小的对象可能未初始化 但在 C 中也是允
  • 反应本机 fs 库不写入文件

    当我使用react native fs创建文件时 回调成功 但该文件不在我的android data com myapp files test txt库中 logcat 中没有错误 所以我想知道为什么我的简单 App js 代码不起作用 S
  • 使用 Kotlin 和 Mockito 模拟通用接口

    我正在尝试使用 Mockito 模拟 Kotlin 中的通用接口 但到目前为止我还没有找到自然的解决方案 鉴于 interface X