Play 2.2:使用Play Caching(Scala)测试代码单元的问题

时间:2014-06-13 14:17:46

标签: scala unit-testing playframework ehcache

我彻底搜查了互联网,找不到解决办法。考虑到这一点,有点令人惊讶应该是一项简单的任务。

我们在Play应用程序中使用Redis,其中一部分是禁用默认的ehcache实现。但是在我们的单元测试中,运行时,它无法连接到Redis(错误是"例如:redis.clients.jedis.exceptions.JedisConnectionException:无法从池中获取资源")。所以我想做的不是在测试中引入Redis并使用默认的ehcache实现(我相信禁用ehcache的application.conf不适用于单元测试)。所以单元测试的顶部看起来像这样:

class MyTest extends FunSuite with MockitoSugar with BeforeAndAfter {
  val app = FakeApplication(
    additionalPlugins = Seq("play.api.cache.EhCachePlugin"),
    withoutPlugins = Seq("com.typesafe.plugin.RedisPlugin")
  )

我正在运行每个测试:

running(app) {...

当我运行游戏测试时,我得到:"没有注册缓存插件。确保至少启用了一个CachePlugin实现。"。这是否意味着我没有获得默认缓存插件的名称是否正确?我尝试使用" play.api.cache.CachePlugin"但是找不到。该插件的名称应该是什么?

这是正确的做法吗?我看过使用inMemoryDatabase的例子,但是我甚至无法为我编译它。 Play无法单独找到inMemoryDatabase(),当它可以找到Helpers.inMemoryDatabase()时,编译器会抱怨它返回Map [String,String],但additionalConfiguration需要Map [String,_]。我正在使用2.2.0-M2播放。

1 个答案:

答案 0 :(得分:1)

通过您的方法添加/删除插件似乎不够,因为它仍在使用配置中的ehcacheplugin=disabled。实际上你也不需要additionalPlugins = Seq("play.api.cache.EhCachePlugin"),因为Play会在默认配置中加载此插件,即使它被禁用了(好吧,有点......它肯定不会做我所做的事情)预期)。

使用additionalConfiguration是可行的方法:

val app = FakeApplication(
    additionalConfiguration = Map(
        "ehcacheplugin" -> "enabled"
    ),
    withoutPlugins = Seq("com.typesafe.plugin.RedisPlugin")
 )

作为旁注,你可能还值得升级到至少Play 2.2.3,因为此时2.2-M2还很老,而不是正式发布。