如何让虚拟时间在猫效应 3 的测试中通过?

Kei*_*son 7 automated-tests scala cats-effect

我正在尝试将Mules转换为 Cats Effect 3 (CE3)。由于它是一个缓存库,在它的测试中它需要(虚拟)时间来测试项目是否会过期。它目前正在大量使用cats.effect.laws.util.TestContext,它允许在不实际睡眠的情况下推进虚拟时钟tickTestContextCE3 中不存在(据我所知),但我总是不愿意将sleep调用放入测试中。IO为这个特定案例滚动我自己的前景是一个令人生畏的前景。当然,这是人们更普遍的问题。但是,我无法TestContext迁移指南中找到参考。

这种情况是否有已知的升级路径?

Kei*_*son 5

从克里斯达文波特一些帮助的不和谐,我发现TestContext仍然存在,但已经移动cats.effect.laws.utilcats.effect.kernel.testkit。它存在于自己的项目和工件中,因此您需要添加一个依赖项(SBT 语法):

    "org.typelevel" %% "cats-effect-kernel-testkit" % catsEffectV % Test,
Run Code Online (Sandbox Code Playgroud)

此外,如果您没有使用laws包中的任何其他内容,那么您将希望删除该依赖项,这将类似于:

    "org.typelevel" %% "cats-effect-laws"           % catsEffectV % Test,
Run Code Online (Sandbox Code Playgroud)

大概这就是他们移动它的原因:因为它不是特定于法律的。


但是,我并没有成功地获得虚拟时间来通过我的测试,并且遗憾地IO.sleep现在用s强制它。:/

  • 另外,https://github.com/typelevel/cats-effect/issues/2220 遗憾的是,这计划于 3.3.0 (2认同)

小智 5

正如 Victor 在 v3.3.0 的评论中提到的,该版本大约一天前发布,您可以在文档中的模拟时间段落中看到虚拟时间的示例