如何测试断言?

2023-12-19

我发现如何测试异常或错误:https://stackoverflow.com/a/54241438/6509751 https://stackoverflow.com/a/54241438/6509751

但我如何测试以下内容assert工作正常吗?

void cannotBeNull(dynamic param) {
  assert(param != null);
}

我尝试了以下方法,但它不起作用。断言只是打印出来,测试失败:

void main() {
  test('cannoBeNull assertion', () {
    expect(cannotBeNull(null), throwsA(const TypeMatcher<AssertionError>()));
  });
}

这有两个关键方面:

  • 将回调传递给expect。当你这样做时,你永远不会做错事,即使你只是实例化一个对象。这已经显示了在链接的答案中 https://stackoverflow.com/a/54241438/6509751.

  • Use throwAssertionError https://api.flutter.dev/flutter/flutter_test/throwsAssertionError.html.

  • 如果您使用的是纯 Dart 而不是 Flutter,您可以使用throwsA(isA<AssertionError>())

Example:

expect(() {
  assert(false);
}, throwsAssertionError);

or

expect(() {
  assert(false);
}, throwsA(isA<AssertionError>()));

应用于问题中的代码:

void main() {
  test('cannoBeNull assertion', () {
    expect(() => cannotBeNull(null), throwsAssertionError);
  });
}

or

void main() {
  test('cannoBeNull assertion', () {
    expect(() => cannotBeNull(null), throwsA(isA<AssertionError>()));
  });
}

为什么我们需要传递回调?好吧,如果你有一个不带参数的函数,你也可以传递一个参考对此也是如此。

如果没有回调,断言将在之前被评估expect被执行了,就没有办法了expect捕获错误。通过传递回调,我们允许expect调用该回调,这允许它捕获AssertionError它能够处理它。

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

如何测试断言? 的相关文章

随机推荐

  • Slick 3.0如何更新变量列列表,哪个数字只有在运行时才知道

    是否可以更新变量列列表 其中的数字仅在运行时由 slick 3 0 知道 下面是我想要做的示例 不会编译 var q Query UserTable UserTable TableElementType Seq userTable var
  • 隐式参数和函数

    我在考虑 Haskell GHC 中的隐式参数时遇到问题 我有一个函数f 假设隐式参数x 并希望通过应用将其封装在上下文中f to g f x Int gt Int gt Int f n n x g Int gt Int gt Int gt
  • 如何用范围填充可变参数?

    填充可变参数的正确方法是什么 我的尝试看起来像自行车 首先我构建范围然后我将其转换为列表然后到 intarray然后传播它 m getColumns count count 35 toList toIntArray 其中 getColumn
  • 将字符串插入工作表会导致插入数字

    在我的 Google Apps 脚本中 我在电子表格中添加了一行 在附加的这一行中 我尝试插入一个值 0102 的字符串 但是插入时它会转换为数字 102 有没有什么方法可以使用 Google Apps 脚本将值插入到工作表中 而不会格式化
  • Ubuntu 自动从 Github 存储库中拉取

    我在我的服务器上安装了 git 但我希望每当我推送本地所做的更改时它都会从我的 github 存储库中提取 我研究过钩子 但它非常令人困惑 而且我找不到任何教程 有谁知道这是怎么做到的吗 我希望我的服务器在每次提交后从存储库中提取 这看起来
  • JPA 和 PostgreSQL 与 GenerationType.IDENTITY

    我有关于 Postgres 和 GenerationType Identity 与 Sequence 的问题 在这个例子中 Id SequenceGenerator name mytable id seq sequenceName myta
  • PySpark Worker 中 rdd.collect() 上的 ModuleNotFoundError

    我正在 python 中运行 Apache Spark 程序 并且收到一个我无法理解且无法开始调试的错误 我有一个驱动程序 它在名为 hound py 的文件中定义了一个名为 hound 的函数 在同一目录中 我有一个名为 hound ba
  • PHP Websocket 在测试中验证用户身份(传递会话 cookie)

    我正在尝试测试一个场景 一方面 匿名用户应立即断开与 Websocket 连接的连接 另一方面 经过身份验证的用户应保持 Websocket 连接 第一种情况很容易使用下面的代码进行测试 身份验证过程不起作用 对于会话存储 我将 Cooki
  • 具有多种格式的 Moshi LocalDateTime 适配器

    默认情况下 ThreeTenABP LocalDateTime 转换为 date day 10 month 4 year 2018 time hour 3 minute 34 nano 115000000 second 18 我可以编写一个
  • Magento 客户/会话不工作

    这个问题首先被意识到是因为前端的订单历史页面 sales order history 只显示一条短消息 您没有下订单 经过一番调试 发现问题出在这个函数上 Mage getSingleton customer session 它不会返回包含
  • 为什么 Plastic SCM 不断询问我是否信任复制服务器的证书?

    每次运行类似命令时 我开始收到以下提示cm status cs 630 rep MyServer repserver ssl
  • 出现“类型错误...$(...).modal 不是函数

    我正在尝试使用引导模式创建和编辑用户更新注释的函数 在 REACT 项目中 但这是我得到的错误 Uncaught in promise TypeError jquery WEBPACK IMPORTED MODULE 1 default m
  • 查找数组中所有元素都具有特定值的文档

    这基本上是一个简单的问题 但我找不到它的查询函数 示例集合 id 1 foo bar 9 bar 16 id 2 foo bar 9 bar 9 bar 9 示例输出 id 2 foo bar 9 bar 9 bar 9 因为这是唯一一个每
  • python pyplot连接点

    我正在使用一组点制作 pyplot 图 plt plot range 0 10 dictionary key bo 这按照我的预期正确地绘制了点 但是我也希望在这些点之间绘制一条线 我找不到用 pyplot 来做到这一点的方法 我认为这是微
  • Oracle 中完全外连接的奇怪行为 - 如何解释?

    我注意到 Oracle 11 中 FULL OUTER JOIN 的奇怪行为 我正在连接 HR 模式中的表 特别是 EMPLOYEES 和 DEPARTMENTS 例如 以下查询返回 123 行 SELECT FROM employees
  • 使用 $resource 承诺模式缓存数据

    假设我的服务从 resource get 返回一个承诺 我想知道这是否是缓存数据的正确方法 在此示例中 点击后退箭头并返回搜索结果后 我不想再次查询网络服务器 因为我已经有了它们 这是处理这种情况的正确模式吗 下面的示例是查询 Flixte
  • 转换时间字符串格式

    我想将时间数据转换为格式HH mm ss在 JavaScript 中 我的代码有问题 请参阅代码内的注释 function parseTime timeString var timeString timeString toLowerCase
  • 如何简化Java中的印度区字符串? (问题扩展)

    我有一系列印度地区 例如String districts district1 district2 district3 等等 也许是印度的全部或部分地区 认为 District1 district2 district3 是拉贾斯坦邦的区 An
  • 删除 Google 地图圆形/形状

    我正在使用 google maps Circle 方法创建一个 Circle 这一切都工作得很好 但是我怎样才能删除这个圆圈呢 My code var populationOptionsAgain strokeColor c4c4c4 st
  • 如何测试断言?

    我发现如何测试异常或错误 https stackoverflow com a 54241438 6509751 https stackoverflow com a 54241438 6509751 但我如何测试以下内容assert工作正常吗