나는 처음으로 캐쉬를 사용하고있다! 스칼라 2.5. 그것은 테스트를 제외하고는 잘 작동합니다.재생! 스칼라 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와 약간의 차이가 있습니다). 어떤 도움이라도 환영받을 것입니다.
편집 : 내가했던 (그리고 아무것도 변경되지 않습니다) 무엇을 (단지 시험)
내 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
}
그리고 내 테스트에서
, 나는 그것을 사용을 같은 : I 클래스FacebookAPI
의 기능을 테스트있을 때
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)
을하지만, 테스트는 통과하지만, 난 여전히 잘못을 많이 가지고 "play"라는 이름의 EhCache 인스턴스가 이미 존재한다는 사실 때문에 ...
[캐시의 현재 소스] (https://github.com/playframework/playframework/blob/2.5.6/framework/src/play-cache/src/main/scala/play/api/cache/) Cache.scala) [이 플러그인을 모듈로 이동하는 방법] (https://www.playframework.com/documentation/2.5.x/PluginsToModules) – Barry
감사합니다. @ 배리하지만 정말 잘 모르겠습니다. 당신이 제공 한 링크로 무엇을 할 것인가. 내 편집보기;) – Simon
어떤 테스트 라이브러리를 사용하고 있습니까? 이 통합 테스트입니까? – Barry