首页 > 解决方案 > 如何在猫效应 3 中让虚拟时间通过测试?

问题描述

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

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

标签: scalaautomated-testscats-effect

解决方案


在 Chris Davenport 在 Discord 上的帮助下,我发现它仍然存在,TestContext但已从cats.effect.laws.util. cats.effect.kernel.testkit它存在于自己的项目和工件中,因此您需要添加一个依赖项(SBT 语法):

    "org.typelevel" %% "cats-effect-kernel-testkit" % catsEffectV % Test,

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

    "org.typelevel" %% "cats-effect-laws"           % catsEffectV % Test,

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


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


推荐阅读