微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

在 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 对其进行了暴力破解。 :/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。