如何使用ScalaTest覆盖Playframework单元测试中的guice模块

Zyg*_*lis 13 unit-testing scala guice scalatest playframework

我想在PlayFramework中为我的控制器编写功能测试.为此,我想模拟一些类的实现.

我在这里找到了如何使用spec2做到这一点的很好的例子:http://www.innovaedge.com/2015/07/01/how-to-use-mocks-in-injected-objects-with-guiceplayscala/

但我正在使用带有OneAppPerSuite使用FakeApplication的特性的scala测试.以下是文档:https: //www.playframework.com/documentation/2.4.x/ScalaFunctionalTestingWithScalaTest

问题是我无法找到一种方法来拦截GuiceApplicationBuilder和覆盖一些模拟实现的绑定.

以下是FakeApplication实施play.api.test:

case class FakeApplication(
  override val path: java.io.File = new java.io.File("."),
  override val classloader: ClassLoader = classOf[FakeApplication].getClassLoader,
  additionalPlugins: Seq[String] = Nil,
  withoutPlugins: Seq[String] = Nil,
  additionalConfiguration: Map[String, _ <: Any] = Map.empty,
  withGlobal: Option[play.api.GlobalSettings] = None,
  withRoutes: PartialFunction[(String, String), Handler] = PartialFunction.empty) extends Application {

private val app: Application = new GuiceApplicationBuilder()
  .in(Environment(path, classloader, Mode.Test))
  .global(withGlobal.orNull)
  .configure(additionalConfiguration)
  .bindings(
    bind[FakePluginsConfig] to FakePluginsConfig(additionalPlugins, withoutPlugins),
    bind[FakeRouterConfig] to FakeRouterConfig(withRoutes))
  .overrides(
    bind[Plugins].toProvider[FakePluginsProvider],
    bind[Router].toProvider[FakeRouterProvider])
  .build
Run Code Online (Sandbox Code Playgroud)

所以我无法拦截GuiceApplicationBuilder和覆盖绑定.

我是playframework的新手,如果问题看起来有点傻,那就很抱歉.谢谢!

ins*_*n-e -1

您可能使用的是旧版本的 ScalaTestPlus,它不支持使用 Application 覆盖 FakeApplication。在Play 文档(Play 2.4) 中,库版本是“1.4.0-M3”,但它应该是“1.4.0”。