Dart 中包含异步函数的测试函数

2023-12-26

我想测试一个调用其他异步函数的函数,但我不知道如何编写它。函数会像这样:

function(X x, Y y) {
    x.doSomethingAsync().then((result) {
        if (result != null) {
            y.doSomething();
        }
    }
}

我想模拟 X 和 Y,运行 X 并验证y.doSomething()被调用。却不知如何等待x.doSomethingAsync()去完成。我正在考虑在断言之前做一些等待,但这似乎不是可靠的解决方案。
有什么帮助吗? :)


您可以使用async/await在飞镖中。这会大大简化你的功能:

function(DoSomething x,  DoSomething y) async {
  final result = await x.doSomethingAsync();
  if (result != null) {
    y.doSomething();
  }
}

这样,函数才会完成,直到x.doSomething已完成。然后您可以使用相同的方法测试您的功能async/await带有 async 的运算符test.

你会有这个:

test('test my function', () async {
  await function(x, y);
});

好的,但是我如何测试函数是否被调用?

为此,您可以使用mockito https://pub.dartlang.org/packages/mockito这是用于测试目的的模拟包。

假设您的 x/y 类别是:

class DoSomething {
  Future<Object> doSomethingAsync() async {}
  void doSomething() {}
}

然后你可以通过使用 Mockito 来模拟你的类方法:

// Mock class
class MockDoSomething extends Mock implements DoSomething {
}

最后,您可以通过执行以下操作在测试中使用该模拟:

test('test my function', () async {
  final x = new MockDoSomething();
  final y = new MockDoSomething();
  // test return != null
  when(x.doSomethingAsync()).thenReturn(42);
  await function(x, y);

  verifyNever(x.doSomething());
  verify(x.doSomethingAsync()).called(1);
  // y.doSomething must not be called since x.doSomethingAsync returns 42
  verify(y.doSomething()).called(1);
  verifyNever(y.doSomethingAsync());

  // reset mock
  clearInteractions(x);
  clearInteractions(y);

  // test return == null
  when(x.doSomethingAsync()).thenReturn(null);
  await function(x, y);

  verifyNever(x.doSomething());
  verify(x.doSomethingAsync()).called(1);
  // y must not be called this x.doSomethingAsync returns null here
  verifyZeroInteractions(y);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dart 中包含异步函数的测试函数 的相关文章

随机推荐

  • 电子邮件主题分隔符间距中的重音单词 - 如何阻止这种情况?

    我们有一个自定义的 php 电子邮件营销应用程序 还有一个有趣的问题 如果邮件的主题行包含带有重音符号的单词 则会 吞掉 该单词与下一个单词之间的空格 示例 短语 安赫尔 里奥斯 埃斯库查 索普伦德 显示 至少通过 gmail 和 Lotu
  • 数组和右值(作为参数)

    我想知道是否有任何方法可以区分以下代码中显示的函数调用 以数组作为参数 include
  • Python:遍历列表

    我有一个智力挑战谜题 我想用 python 来解决 他们给出了 4 个数字 25 28 38 35 他们希望我们将这些数字放在 一种可能的解决方案是 25 38 35 28 我尝试过 从数字中列出一个列表 用一些循环和 if 来迭代它们 l
  • 无法从我的学校网站获取我的日程安排数据。使用 cURL 登录不起作用

    Edit 为什么要负一呢 我想做的是 我正在尝试使用 cURL 登录我的学校网站并获取时间表以将其用于我的 AI 因此 我需要使用我的通行证和号码登录 但学校网站上的表格还需要一个隐藏的 令牌
  • 将多个 .sql 表转储文件合并到单个文件中

    假设我有数据库A和表b 给定多个 sql 文件 b1 b2 bn 其中每个文件对应于 b 的互斥表转储 我如何将所有文件 b1 b2 bn 合并到单个 sql 表文件中 或者我如何将各个文件的导入合并到一个表中 没有特殊的工具可以做到这一点
  • 循环遍历所有文件夹及其所有子文件夹VBA

    我知道这个问题之前被问过很多次 我已经检查了之前的建议 但我无法让我的代码运行 所以 我有一个名为 Report 的文件夹 其中也包含多个文件夹 这些文件夹包含 xlsx 和 zip 文件 每个文件还包含一个名为 2016 的文件夹 其下有
  • /www 之外的指定虚拟主机上的 Wampserver 403

    当我尝试在 c wamp www 目录之外创建虚拟主机时 Wampserver 告诉我访问被拒绝 我可以在该目录中制作一个罚款 即使对文件夹建立符号链接也可以 但我宁愿不必使用符号链接 为什么不起作用 这是我在 httpd conf 末尾使
  • Django 上多租户应用程序的最佳架构

    我一直在思考创建基于多租户应用程序的正确 最佳方法 关于姜戈 一些解释 应用程序可由多个租户 tenant1 tenant2 使用 所有租户个人数据都必须受到保护 防止其他租户 及其用户 访问 租户可以选择为应用程序对象创建额外的自定义字段
  • 计算数组数组中的项目数?

    如果我有一个声明为的对象 let compoundArray Array
  • 在 Visual Studio 中对文件进行分组

    我正在考虑在 Visual Studio 中整理我的项目布局 我想知道是否有任何 hack 插件或技巧可以将 xml 文件与 cs 文件关联起来同名所以它们出现在我的解决方案导航器 资源管理器中 类似于代码隐藏文件与其 aspx 关联的方式
  • 从 Mac 上的 SWT 应用程序打开 LWJGL 窗口

    我有一个 SWT 应用程序 可以在按下按钮后打开 OpenGL 窗口 使用 LWJGL 库 它应该关闭它的主 SWT 窗口并打开一个带有 OpenGL 上下文的新窗口 在 Windows 上运行良好 在 Mac 上 我收到此错误 2010
  • Azure 托管和 MVC5 报告

    我正在使用 Visual Studio 2013 开发托管在 Azure 上的 MVC5 EF6 Web 应用程序 我刚刚完成需要创建报告的开发部分 我试图使用 Microsoft ReportViewer 来实现此目的 尽管它在本地工作得
  • Haskell:有条件地中断循环

    我想在这样的情况下打破循环 import Data Maybe fromJust isJust Maybe Just tryCombination Int gt Int gt Maybe String tryCombination x y
  • LaTeX 相当于 Google Chart API

    我目前正在寻找不同的解决方案 将二维数学公式放入网页中 我认为维基百科解决方案 从 LaTeX 源代码生成 png 图像 已经足够好了 直到我们在网络浏览器中获得对 MathML 的支持 我突然意识到也许可以创建一个谷歌图表 API htt
  • 配置next.config文件

    我正在使用 Next js 并想添加反应语义用户界面 https react semantic ui com 使用他们的登录组件之一 在前端我收到此错误 编译失败 node modules semantic ui css semantic
  • R (dplyr):查找行特定范围内的所有行

    我有一个数据集 其中每一行都由住院 ID 标识 每行包含有关住院 ID 发生医院 ID 以及给定住院的入院日期和出院日期的信息 我想知道 对于每次住院治疗 在该次住院开始前 30 天内在指定医院结束的所有其他住院治疗的 ID 以下是 2 家
  • 在Delphi中是否可以将接口绑定到未实现它的对象

    我知道 Delphi XE2 有新的 TVirtualInterface 用于在运行时创建接口的实现 不幸的是我没有使用 XE2 我想知道在旧版本的 Delphi 中做这种事情涉及什么样的黑客行为 假设我有以下界面 IMyInterface
  • AVCaptureSession 没有提供良好的照片质量和良好的分辨率

    我正在与AVCaptureSession用于捕获图像 它工作正常 但没有给出好的解决方案 我将其与iPhone相机拍摄的图像进行了比较 发现iPhone相机拍摄的图像比iPhone相机拍摄的图像要好得多AVCaptureSession im
  • 无法跨子域读取cookie(owa_cookie)

    在我的生产环境中 我的前端位于 a example com 后端位于 b example com 我正在使用 javascript 在 example com 域的路径 中创建一个 cookie 以便从任何子域读取它 当我尝试使用 owa
  • Dart 中包含异步函数的测试函数

    我想测试一个调用其他异步函数的函数 但我不知道如何编写它 函数会像这样 function X x Y y x doSomethingAsync then result if result null y doSomething 我想模拟 X