应该是“安排-断言-行动-断言”吗?

2024-02-12

关于经典的测试模式安排-执行-断言 http://c2.com/cgi/wiki?ArrangeActAssert,我经常发现自己在 Act 之前添加了反断言。这样我就知道传递的断言确实是作为操作的结果传递的。

我认为它类似于红绿重构中的红色,只有当我在测试过程中看到红色条时,我才知道绿色条意味着我已经编写了有所作为的代码。如果我写了一个通过的测试,那么any代码将满足它;类似地,对于 Arrange-Assert-Act-Assert,如果我的第一个断言失败,我知道任何法案都会通过最终的断言 - 因此它实际上并没有验证有关该法案的任何内容。

您的测试遵循这种模式吗?为什么或者为什么不?

Update澄清:最初的断言本质上与最终断言相反。这并不是断言 Arrange 有效;而是说 Arrange 有效。这是一个断言,该法案尚未发挥作用。


这不是最常见的事情,但仍然很常见,有自己的名字。这种技术称为守卫断言。你可以在这本优秀书籍的第490页找到它的详细描述xUnit 测试模式作者:Gerard Meszaros(强烈推荐)。

通常,我自己不会使用这种模式,因为我发现编写一个特定的测试来验证我认为需要确保的任何前提条件更为正确。如果前提条件失败,这样的测试应该总是失败,这意味着我不需要将它嵌入到所有其他测试中。这可以更好地隔离关注点,因为一个测试用例仅验证一件事。

对于给定的测试用例,可能需要满足许多先决条件,因此您可能需要多个 Guard Assertion。不必在所有测试中重复这些测试,而是为每个先决条件进行一个(且仅一个)测试,使您的测试代码更易于维护,因为这样您的重复次数就会减少。

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

应该是“安排-断言-行动-断言”吗? 的相关文章

随机推荐

  • 如何将 _locale 参数添加到安全路径?

    我设置了安全设置来保护根路径下的所有内容 除了查看隐私政策的公共页面外 privacy 一切正常 security yml access control path privacy role IS AUTHENTICATED ANONYMOU
  • 设置 PEP 代理

    我一直在研究 PEP Proxy Steelskin 以便我可以为我的 Orion Context 提供一些安全层 但是 有一些问题阻碍了我的进展 我想使用 IDM 和 Keystone 全局实例 我已按照相应的指示成功安装了 pepPro
  • PHP GD imagecreatefromjpeg 无法处理大尺寸图像?

    我的项目是当我自动上传图像时我的程序将创建拇指大小 如果图片大小约为 1024x768 我的程序可以正常工作 但是当我上传大小为 1576x2379 的图片时 显示如下错误 允许的内存大小 8388608 字节已耗尽 尝试分配 1576 字
  • SwiftUI 导航到 NavigationView 堆栈的底部

    我进行了以下设置 其中父视图包含NavigationView它显示一系列页面 A B 和 C 在页面 C 上有一个隐藏导航视图的按钮 我想要它 以便当再次显示导航视图时 它会自动导航到页面 A 但是我不确定如何使用 SwiftUI 执行此操
  • d3.js:具有多个 y 轴值的数据集数组

    我是 d3 js 的初学者 所以请友善 考虑这个 jsbin 示例 http jsbin com edatol 1 edit 我有以下数据集 var dataset d3 time hour utc offset now 5 1 10 d3
  • 如何将多个文件复制到docker数据卷中

    这听起来可能微不足道 但我找不到一种简单的方法将多个文件复制到 Docker 卷的根文件夹中 我正在使用Ubuntu仙尼尔 16 04 and 泊坞窗1 12 1 例如 如果我有一个带有卷的 Ubuntu 容器 my data docker
  • 使用 Supervisord 运行 PostgreSQL

    我想在 Ubuntu 10 04 上使用 Supervisor 运行 PostgreSQL 9 1 目前 我使用 init 脚本手动启动 PostgreSQL etc init d postgresql start 根据这篇文章 http
  • 类型错误:push() 不是一个函数

    我正在尝试将一个项目推送到数组 但它不起作用 当我运行代码时 我收到此错误 未捕获的类型错误 data allItems type push 不是函数 var data allItems exp inc totals exp 0 inc 0
  • 如何在后台运行 Solr Jetty

    我正在使用 Solr 附带的 Jetty Solr 构建 并且希望在后台而不是在终端中运行它 现在我开始它java jar start jar但我希望它记录到一个文件并在服务器的后台运行 以便我可以关闭终端窗口 我确信有一些我找不到的 ja
  • 使用PyInstaller将.py和.txt文件封装成.exe文件

    我有 2 个文件想要放入 exe 文件中 其中一个文件是 py 另一个是 txt我找不到如何获取多个文件并将其转换为可执行文件 请帮忙 您应该将 txt 文件放在一个文件夹中 然后将文件夹的名称放在 标签中 pyinstaller onef
  • 使用 Javascript 访问 CSS 自定义变量

    我在 css 文件中有以下样式 galleryImages position absolute top 24px left 41px width 900px moving false 当我尝试通过 Javascript 访问它时 它返回未定
  • JMeter(活动?)FTP 到 VLTrader

    情况 我正在使用 JMeter 来加载测试我的通信应用程序 Cleo VLTrader 我是 JMeter 的新手 并且能够使 HTTP 通信工作 但不能使 FTP 工作 当我尝试使用 JMeter FTP 请求采样器时 我可以在服务器端看
  • Nodejs如何为每个请求设置内容类型标头

    我想知道如何设置标题 Content Type application json 对于每个进来的 Nodejs Express 请求 我尝试了这两行 但如果我自己不添加标头 我的调用仍然失败 app use function req res
  • 如何创建一个Looper线程,然后立即向其发送消息?

    我有一个工作线程位于后台 处理消息 像这样的事情 class Worker extends Thread public volatile Handler handler actually private of course public v
  • Clojure 中的结构共享

    我不清楚 Clojure 中的结构共享 下面是一个函数 xconj 取自 Joy of Clojure 顺便说一句 很棒的书 Building a naive binary search tree using recursion defn
  • 如何禁用
     块的 Prettier 以便保留新行(换行符)?                
                

    prettier config js module exports arrowParens always bracketSpacing true endOfLine auto printWidth 180 semi true singleQ
  • 如何使用请求模块缓冲 HTTP 响应?

    我想将 HTTP 响应的内容流式传输到变量 我的目标是通过获取图像request 并将其存储在 MongoDB 中 但图像总是损坏 这是我的代码 request http google com doodle png function err
  • 如何在使用 boto3 create_presigned_post 时添加元数据?

    想要将自定义元数据添加到我上传的文件中create presigned post来自boto3 我正在运行以下代码 但收到 403 响应 下面的代码借用自here https boto3 amazonaws com v1 documenta
  • 如何将 BytesIO 与 matplotlib 和 pyqt5 一起使用?

    我在 matplotlib 中制作了一个图表 并希望将其放入图像中并在我的 pyqt5 应用程序中使用它 有人建议我为此使用 BytesIO 到目前为止 这是我的代码 绘制我的图表 plt axis equal buff io BytesI
  • 应该是“安排-断言-行动-断言”吗?

    关于经典的测试模式安排 执行 断言 http c2 com cgi wiki ArrangeActAssert 我经常发现自己在 Act 之前添加了反断言 这样我就知道传递的断言确实是作为操作的结果传递的 我认为它类似于红绿重构中的红色 只