如何在Play测试中使用guice依赖注入(Play 2.6.3)

时间:2017-09-29 16:20:40

标签: scala dependency-injection playframework

我有一个名为MyTestSpec的测试规范。目的是测试在其构造函数中使用依赖注入的控制器。

class StatusController @Inject()(cc: ControllerComponents, counter: Counter) extends AbstractController(cc) { ...

Counter类是另一个向另一个提供状态的控制器。当我现在尝试测试这个控制器时,我可以选择模拟所需的Counter类,构造整个控制器/依赖链或注入它。我们暂时忽略嘲笑,尽管这可能是更正确的事情。

问题是,当我尝试注入Counter控制器时,我得到一个NullPointerException。

到目前为止我尝试了什么:

  • 将计数器注入MyTestSpec的构造函数,但之后甚至不会构建和测试MyTestSpec。
  • 使用@Inject注释注入本地var。
  • 通过app.injector.instanceOf [Counter]注入val。
  • 通过shortform注入[Counter]注入。

所有人实际上都没有给我这个其他的控制器。

在测试的大致轮廓下,可以轻松调整开始使用Play的新应用程序来演示问题:

class MyTestSpec extends PlaySpec with GuiceOneAppPerTest with Injecting {
  "StatusController GET" should {
    "render the status page from a new instance of controller" in {
      val controller = new StatusController(stubControllerComponents(), counter)
      ...
  }
}

问题:有没有办法简单地注入这个计数器控制器?如果没有简单的方法,那么如果我已经受到限制,那么我可以随后注入哪些组件......?

注意:这与提出的问题不同here,尽管我尝试了其中提供的解决方案。

注2:感谢Play和ScalaTest开发人员以及幕后所有这些贡献者 - 一个很棒的框架。

0 个答案:

没有答案