Kotlin:对以函数作为参数的函数进行单元测试

2024-01-10

我有一个从存储库中检索项目列表的函数。我没有使用常规回调,而是传入一个函数并使用结果调用它。但是如何对这种功能进行单元测试呢?是否有某种方法可以验证传入的函数是否正在被调用,或者我应该重构并使用常规回调并使用模拟回调接口对其进行测试?

My code:

class WorklistInteractor @Inject
constructor(private val worklistRepository: WorklistRepository,
            private val preferenceManager: PreferenceManager,
            private val executor: Executor)
    : WorklistDialogContract.Interactor, Executor by executor {

    @Volatile private var job: Job? = null

    override fun getWorklist(callback: (Result<List<WorklistItem>>) -> Unit) {
        job = onWorkerThread {
            val result = worklistRepository.getWorklist().awaitResult()
            onMainThread { callback(result) }
        }
    }

    override fun cancel() {
        job?.cancel()
    }
}

要检查它是否被调用,类似的东西会起作用:

var hasBeenCalled = false
interactor.getWorklist({ result -> hasBeenCalled = true })

assertTrue(hasBeenCalled)

当然你也可以检查预期的结果是否通过等等。

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

Kotlin:对以函数作为参数的函数进行单元测试 的相关文章

随机推荐

  • Angular 2 中用于身份验证的良好模板策略

    我目前有一个 Angular 2 应用程序正在运行 如下所示 App component 在访问站点时被引导 App component 的模板具有所有组件标签 例如 menu component search component 和 ro
  • 现在目标已弃用,在新窗口中打开表单提交的正确方法是什么

    通常我会我们
  • 如果指定 SELECT DISTINCT 错误,则 ORDER BY 项必须出现在选择列表中

    我需要以某种方式列出一个字段 但以不同的方式对其进行排序 这是查询 有什么办法解决这个问题吗 SELECT DISTINCT tsgroup FROM master ORDER BY RIGHT RTRIM tsgroup 3 LEFT r
  • 从远程服务器访问sqlite

    我想知道如何访问位于远程服务器上的 sqlite 数据库 我已经阅读了不鼓励它的线程 但如果可能的话我需要这样做 QUrlOperator xc http example com xc get testdatabase db QSqlDat
  • 为什么 Pycharm 调试器停止工作

    我正在尝试在 Pycharm 中调试我的代码 但它显示为 pydev debugger 进程 58159 正在连接 并简单地给出输出 验证是否还有其他断点并删除其他断点 还是没有运气 还尝试在不同的项目中调试相同的代码 但甚至不起作用 我使
  • Nuxt 仅针对特定路径监视路由

    我在我的应用程序中显示一些图像 假设图像正在显示域名 com 壁纸路线 我使用 fetch 方法进行展示 并使用此代码监视查询和参数 watch route query fetch async fetch console log fetch
  • Flutter - 使用 showDialog 时无法在父树中找到块

    我在一个小应用程序中使用 Flutter 和 flutter bloc 并且我使用 MultiBlocProvider 在主主页中使用我需要的多个 BlocProvider 并且在主页下有一个 MainWidget 它可以通过以下方式轻松访
  • 为什么以及何时在 asp.net 中重写和使用 OnPreRender

    我正在编写由另一位开发人员编写的代码 如下所示 protected override void OnPreRender EventArgs e PopulateGrid base OnPreRender e 我会打电话给PopulateGr
  • BroadcastReceiver和Activity之间的通信 - android

    我的应用程序中有一个广播接收器 每次用户接到来电时都会触发该接收器 现在 当它发生时 我需要广播接收器在特定活动中调用特定方法 现在 我试图使这个方法成为静态的 从而可用 但有些东西告诉我这是一个非常糟糕的主意 因此 我尝试在我的活动中实例
  • 如何在倒排索引结构中搜索短语查询?

    如果我们想在倒排索引结构中搜索像 t1 t2 t3 这样的查询 t1 t2 t3必须排队 我们应该采取哪些措施 1 首先我们搜索 t1 术语并找到包含 t1 的所有文档 然后对 t2 和 t3 执行此操作 然后找到 t1 t2 和 t3 位
  • 从 visio 检测 IE 上的事件

    我可以在 IE 页面上的按钮和 visio 事件之间建立链接吗 例如 只需单击 IE 页面上的按钮即可更改形状的颜色 除非您也可以访问 IE 中的 HTML 内容 否则这并不容易 但是您可以使用 VBA 类 该类实现 withevents
  • 控制狂:提交被拒绝。 Bitbucket 中不允许 Foxtrot 合并

    究竟是什么原因Control Freak Commit rejected Foxtrot merges not allowed 我们经常收到此错误 这是由于以下原因的组合造成的pull rebase and amend用户在提交时 需要明确
  • 在自定义组件中,在样式标签中加载样式更快还是使用链接标签更快?

    我正在开发一些自定义组件 我想知道在模板内的样式标签中加载样式或使用链接标签是否是最佳实践 rel stylesheet 来调用样式 使用样式标签 const template document createElement template
  • 用 OCaml 编写解释器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在大学学习一门课程 要求我从操作语义开始 用 OCaml 编写一种语言的解释器 不幸的是 除了课程
  • Objective-C 接口的前向声明

    我如何转发声明这个对象 interface MyClass NSObject
  • Node.js 和 Microsoft SQL Server

    有什么方法可以让我的 Node js 应用程序与 Microsoft SQL 进行通信吗 我还没有见过任何 MS SQL 驱动程序吗 我正在将一个非常简单的应用程序放在一起 并且需要能够与现有的 MS SQL 数据库进行通信 否则我会使用
  • 使用 Google 脚本将图像保存到电子表格

    我正在尝试使用 jSignature 将签名板添加到 Google 表格 我添加了一个记录签名的对话框 如下所示 Code gs function showDialog var html HtmlService createHtmlOutp
  • 无法通过android NDK(camera2 api)获取相机列表

    尝试使用 Qt5 12 3 和 android ndk 构建应用程序 但无法通过 ACameraManager getCameraIdList 获取相机列表 手机 索尼 xperia XA1 Ultra Qt 5 12 3 NDK r19c
  • “ngserve”命令适合生产吗?

    我正在使用 Angular 7 构建一个小项目 当你运行时 ng serve NodeJS 服务器启动来处理请求 每个请求是否会阻塞直到处理完成 我们正在尝试评估在生产中使用它与使用更传统的应用程序服务器相比有多有效 Run build p
  • Kotlin:对以函数作为参数的函数进行单元测试

    我有一个从存储库中检索项目列表的函数 我没有使用常规回调 而是传入一个函数并使用结果调用它 但是如何对这种功能进行单元测试呢 是否有某种方法可以验证传入的函数是否正在被调用 或者我应该重构并使用常规回调并使用模拟回调接口对其进行测试 My