如何使用模拟框架测试在谷歌测试延迟后进行的调用

2024-01-15

我目前正在尝试评估不同的测试框架。当使用模拟框架时(我倾向于 FakeIt,但 google mock 也很好),我知道您可以通过在调用函数之前和之后使用操作系统的计时器调用来验证函数的性能来进行自己的“性能”测试。这不是我所追求的。

我所做的是在给定某些输入的情况下实现输出延迟的类。例如:

  • 输入1从低电平到高电平
  • 输出1从低电平变为高电平after1.5秒。

我希望能够在指定边界的地方做一些事情:

myMock.theInput();
EXPECT_CALL(myMock, theDelayedOutput())
  .Times(1)
  .Before(1.6sec)
  .After(1.4sec);

为了澄清起见,Before and After不支持线路。这只是我喜欢的简单语法的一个示例。

是否可以在进行输入调用和检查之前在窗口内实现“延迟”功能EXPECT_CALL?

这是方法的一部分 - 我仍然需要启动一个专有的计时器。像这样的东西吗?

myMock.theInput();
windowSleep(1.4);
startTimer();
EXPECT_CALL(myMock, theDelayedOutput())
  .Times(1)
endTimer();
ASSERT_TRUE(elapsedTime() <= 0.2);

由于您用单元测试标记了问题:在单元测试中,您的测试永远不应该依赖于物理时间的流逝。这有多种原因:其中之一是您希望测试尽快运行,因此您不希望出现延迟。另一个原因是,由于硬件、操作系统、系统负载不同,开发环境(运行单元测试的地方)的时间可能与目标环境完全不同。

也就是说,涉及物理时间流逝的测试确实有意义,但它们将是对目标系统(或其某些模拟)的集成测试。在单元测试中,您将采取不同的方法:

您将模拟代表您的时钟的函数/方法。例如,如果您的函数 funcA 通过 setTimer 设置计时器,则提供在时间过去时调用的回调:

  • 在某些测试中,您模拟 setTimer 函数,调用 funcA,并作为测试通过标准的一部分,检查是否使用您期望的参数调用了模拟的 setTimer。
  • 在其他一些测试中,您可以直接从测试中调用回调函数,以查看该函数的行为是否正确。

在这两个单元测试案例中,您不需要等待物理时间过去。

也就是说,您当然可以使用用于单元测试的相同测试框架也用于集成测试(即使它们的名称,如 JUnit,似乎表明它们仅用于单元测试)。而且,如果集成测试实际上是您的目标测试类型,那么 Jeff Lamb 的建议肯定会有所帮助。

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

如何使用模拟框架测试在谷歌测试延迟后进行的调用 的相关文章

随机推荐

  • Tomcat如何定位webapps目录?

    Tomcat如何定位webapps目录 这个位置设置在哪里 是相对目录吗 它可以在 CATALINA BASE conf server xml in the
  • 使用vba建表时如何指定主键

    我已经用下面给出的建议更新了代码 我已经测试过并且效果很好 供未来用户快速参考 我使用下面的代码创建链接表 而无需为每个用户设置 DSN 如果手动连接 我如何指定主键 Dim sConnect As String Dim db As DAO
  • 使用 asp.net 调用存储过程

    如果我在 web config 文件中定义了连接字符串 如何创建到 SQL 数据库的连接C 代码 抱歉忘记指定 然后调用存储过程 然后我想最终以某种方式使用这些数据作为 GridView 的数据源 以下是 web config 中连接字符串
  • 如何使用 Json.NET 将 IHtmlString 序列化为 JSON?

    我有一个包含通过 JSON 发布的原始 HTML 的字段 该字段最近从字符串转换为 IHtmlString 当这个变化发生时 该字段从一个 JSON 字符串变成一个空对象 并且一堆消耗 JSON 的东西开始爆炸 When it was a
  • 使用curl 时,出于安全原因,如何使我的cacert.pem 保持最新状态?

    我想保持我的根证书为最新状态 以便与 cURL 和 PHP 内部一起使用curl命令 但是当前没有参数可以下载正确的安全连接所需的当前文件并使其保持最新 以及使用示例curl在 PHP 中用于安全连接 需要一个名为cacert pem 用于
  • Option.zip 返回列表,而不是选项

    标准库文档描述zip部分签名为def zip B that GenIterable B Option A B but Some 1 zip Some 2 返回一个List 1 2 not Some 1 2 是实施有问题还是文档有问题 有缺陷
  • 如何使用 C# 将每个单词的第一个字符或整个字符串的第一个字符大写?

    我可以编写自己的算法来做到这一点 但我觉得应该有相当于ruby 的人性化 http api rubyonrails org classes ActiveSupport CoreExtensions String Inflections ht
  • 如何在 Ruby 2.7.0 上安装 Nokogiri

    我最近升级到 Ruby v2 7 0 当我尝试安装 Nokogiri 时 出现以下错误 ERROR Error installing nokogiri The last version of nokogiri gt 0 to support
  • 根据另一列中的值有条件地使用颜色填充特定列中的单元格

    我有以下数据框 col1 lt rep c A B C D 10 col2 lt rep c 1 0 10 col3 lt rep c 0 1 10 col4 lt rep c 1 0 10 col5 lt rep c 0 1 10 tes
  • Git“实时服务器”最佳实践

    我和我的合作伙伴一直在尝试从影响公众可查看的文件的存储库中推送和拉取的想法 而不是将存储库存储在隐藏位置 并在我们认为文件可以使用时仅通过 FTP 传输文件 虽然能够直接推送到 实时站点 将非常方便 但我想知道这会产生什么负面影响 如果有的
  • 在浏览器中编译一个“.vue”组件,只用JS?

    我想将 vue 组件 包含 html js css 编译为 JS 但在浏览器端 没有 browserify vuify webpack 或其他 在一个更好的世界中 我想将我的 vue 组件包含到我的 html 应用程序中 就像这样 不需要在
  • Google 表格中的 SUBQUERY 等效项

    使用查询 我尝试计算当月注册的托盘最多的当天注册的托盘的最大数量 该栏将启动 最大日 我的电子表格的链接 https docs google com spreadsheets d 1DkLmJUUFJgnlMD2u PYcxmPlal ar
  • 熊猫压平一列中的列表列表?

    我正在尝试压平一列 该列是列表的列表 var var2 0 9122532 0 458182615 0 79834910 0 1 79834910 0 458182615 0 9122532 0 2 458182615 0 79834910
  • 尝试播放声音时出错

    类似这个问题Matlab 中的基本声音错误 https stackoverflow com q 9369833 501663 没有答案 当我尝试播放声音 Matlab 2012a Windows 7 64位 时 使用sound sounds
  • java中的继承和超类(Object, Class)

    Is java lang Object隐式继承的所有自定义类 对象的超类 我以为java不支持多重继承 我问的原因是我是否已经从自定义类中的另一个类继承 并且 java 再次强制隐式继承java lang Object最重要的是 这不是多重
  • 为什么我们要在FRP中使用Behavior

    我正在学习反应式香蕉 为了理解该库 我决定实现一个虚拟应用程序 每当有人按下按钮时 该应用程序就会增加计数器 我使用的 UI 库是 Gtk 但这与解释无关 这是我提出的非常简单的实现 import Graphics UI Gtk impor
  • 是否可以有像部分类一样的部分xaml?

    我想将一个 xaml 文件分成几个文件 有点像部分类 有办法做到这一点吗 我希望能够更方便地管理我的项目文件 有一些可能性 尽管它可能并不完全是你所想的 您可以通过 ResourceDictionary 的方式外包资源 这对于样式和模板来说
  • 是否可以更改导航按钮以显示图像而不是蓝色?

    我正在尝试设置一个NavigationButton显示图像 而不仅仅是蓝色按钮 目前 我正在显示一个水平的 Scrollview 由图像组成 这些图像应该导致另一个视图 该视图将呈现在rootView 然而 当我将这些图像包裹在Naviga
  • 在带有 iOS 11 的 xcode 9 中 - 首次运行时加载地图图块的问题

    更新了新发现 在模拟器和设备上进行了测试 当应用程序从冷启动运行时 地图无法正确加载 不显示图块 mapViewDidFinishLoadingMap没有被调用 因此 由于地图未完成而出现问题 但我没有收到任何错误 如果我只是短暂退出应用程
  • 如何使用模拟框架测试在谷歌测试延迟后进行的调用

    我目前正在尝试评估不同的测试框架 当使用模拟框架时 我倾向于 FakeIt 但 google mock 也很好 我知道您可以通过在调用函数之前和之后使用操作系统的计时器调用来验证函数的性能来进行自己的 性能 测试 这不是我所追求的 我所做的