scala - 如何在猫效应 3 中让虚拟时间通过测试?
问题描述
我正在尝试将Mules转换为 Cats Effect 3 (CE3)。由于它是一个缓存库,因此在其测试中它需要(虚拟)时间来测试项目是否会过期。它目前正在大量使用cats.effect.laws.util.TestContext
,它允许在不实际休眠的情况下推进虚拟时钟tick
。TestContext
CE3 中不存在(据我所知),但我总是讨厌将sleep
调用放入测试中。IO
不过,为这个特定案例滚动我自己的前景令人生畏。当然,这是人们遇到的更普遍的问题。但是,我无法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
但是,我没有成功地获得虚拟时间来通过我的测试,并且现在很遗憾地用s强制它。:/
推荐阅读
- julia - MethodError(f=typeof(Core.Compiler.fieldindex()
- javascript - 如果输入为空,如何将状态重置为空?
- angular - 在角度组件单元测试时向组件提供/注入第三方服务
- django - Django annotate(...) 取字典
- python - pycryptodome 和密码学之间的不同 RSA 签名
- git - 如何在 git stash save --keep-index 之前重新启动状态?
- ios - 如何确认 App Store 将尊重我的最低 iOS 版本?
- excel - 使用 Excel VBA 从其他工作表更新成本中心
- realm - 如何查询 Realm DB Browser?
- reactjs - React - 通过存在对象属性覆盖状态