gpt4 book ai didi

scala - 玩!斯卡拉 2.5 : testing classes injecting cache leads to an error

转载 作者:行者123 更新时间:2023-12-04 07:18:40 25 4
gpt4 key购买 nike

我第一次使用 Play 的缓存!斯卡拉 2.5。除了测试,它运行良好。

我的测试仍然通过,因为我不需要缓存,但我得到了这个错误(还有很多其他人都在说同样的事情):

Unable to provision, see the following errors:

1) Error in custom provider, play.api.cache.EhCacheExistsException: An EhCache instance with name 'play' already exists.

我理解这个错误,但我没有设法实现我自己的缓存 API 版本(模拟它)。

我尝试按照 play mailing list 上的说明进行操作但没有成功(与 Play! 2.4 存在一些差异,因为该模块是依赖注入(inject)的)。欢迎任何帮助。

编辑:我所做的(并没有改变任何东西):

我的 CacheApi 版本(仅用于测试):
class MyCacheApi extends CacheApi {
lazy val cache = {
val manager = CacheManager.getInstance()
manager.addCacheIfAbsent("play")
manager.getCache("play")
}

def set(key: String, value: Any, expiration: Duration = Duration.Inf) = {}

def remove(key: String) = {}

def getOrElse[A: ClassTag](key: String, expiration: Duration = Duration.Inf)(orElse: => A): A = {
get[A](key).getOrElse {
val value = orElse
set(key, value, expiration)
value
}
}

def get[T: ClassTag](key: String): Option[T] = None
}

在我的测试中,我像这样使用它:
lazy val appBuilder = new GuiceApplicationBuilder()
.in(Mode.Test)
.overrides(bind[CacheApi].to[MyCacheApi])

lazy val injector = appBuilder.injector()
lazy val cache = new MyCacheApi
lazy val facebookAPI = new FacebookAPI(cache)

但是当我测试类的功能时 FacebookAPI ,测试通过了,但由于已经存在名为“play”的 EhCache 实例,我仍然有很多错误消息......

最佳答案

如果您有多个使用相同缓存的测试套件,您可以在每个测试套件结束时显式关闭 CacheManager 并按顺序运行它们:

override def afterAll(): Unit = {
CacheManager.getInstance().shutdown()
}

关于scala - 玩!斯卡拉 2.5 : testing classes injecting cache leads to an error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39453838/

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