gpt4 book ai didi

c++ - 在使用模拟框架进行谷歌测试延迟后,如何测试调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:06 26 4
gpt4 key购买 nike

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

我所拥有的是在给定特定输入的情况下实现输出延迟的类。例如:

  • 输入 1 从低到高
  • 输出 1 1.5 秒后从低变为高。

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

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

需要说明的是,不支持 BeforeAfter 行。这只是我更喜欢的简单语法的一个示例。

是否可以在进行输入调用和检查 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 的建议肯定会有所帮助。

关于c++ - 在使用模拟框架进行谷歌测试延迟后,如何测试调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com