gpt4 book ai didi

java - 使用 ScheduledExecutorService 的测试代码(不使用 Sleep)

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:12 25 4
gpt4 key购买 nike

我有一个验证对象,它通过一系列检查运行输入。如果输入未通过任何检查,则验证结束。

通过所有检查的输入将根据滑动时间窗口进行分组。当第一个输入到达时,该窗口启动。所以这是流程:

  1. 第一个输入到达。
  2. 输入通过所有检查。
  3. 由于没有 Activity 计时器,输入被放入一个新篮子中。计时器窗口开始 N 秒。
  4. 在此计时器窗口内通过所有检查的任何后续输入都将被分组到同一个篮子中。
  5. 计时器一响,篮子就会发出。
  6. 任何进一步的有效输入都会启动一个新的计时器,然后重复该过程。

目前,为了确保有效的输入正确组合在一起,我在单元测试中使用了 Thread.sleep(即,一旦我发送了一些输入,我就会睡几秒钟,然后醒来并让确保发出的篮子包含所有预期的东西)。

这开始变得烦人了,因为我有 700 多个单元测试,而每次运行完整套件时,这个测试集合都是瓶颈。

时间窗口只是一个ScheduledExecutorService。为了能够更快地测试此功能,我是否应该创建一个可设置的时间窗口对象?

最佳答案

您的“单元测试”听起来有点像集成测试。您不仅在测试使用 ScheduledExecutorService 的单元,而且还在测试 ScheduledExecutorService 本身。

更好的方法是注入(inject) mock ScheduledExecutorService。换句话说,您不需要测试定时事件是否真的在四秒后发生;您应该只需要测试您的单元是否要求调度程序在四秒后运行它。

这就是 mock 的用武之地。您注入(inject) mock 调度程序,在您的单元上执行一些操作,使其与调度程序交互,然后您可以询问 mock 以验证交互是否确实以预期的方式发生。

如果操作得当,每个测试用例都可以在几毫秒或几微秒内完成,而不是几秒。

关于java - 使用 ScheduledExecutorService 的测试代码(不使用 Sleep),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32459184/

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