如何使用 Play 框架将服务 class 注入规范 class

How to inject a service class into a Spec class with Play framework

我正在尝试为 scala-play 应用程序编写测试,但由于无法将 MyService 注入我的 class 规范(下面的示例代码)而卡住了。

//--------我要注入的服务------------///

class MyService@Inject()(ws: WSClient,
                         config: Config,
                         myData1DAO: MyData1DAO,
                         myData2DAO: MyData2DAO,
                         myData3DAO: MyData3DAO,
                         myData4DAO: MyData4DAO,
                         myData5DAO: MyData5DAO,
                         myData6DAO: MyData6DAO)(implicit ec: ExecutionContext) {
        def methodIWantToCallInTests = ???
}

////------------我的测试规格--------------------/////

class MyTestSpec Inject()(myService: MyService) extends PlaySpec with MockitoSugar { 
// DOESNT WORK :(
//


  "MyService" should {
    "make something good" in {

        new MyService( .., .., ..,).methodIWantToCallInTests  // TOO LONG :(

    }
  }
}

如代码所示尝试注入 MyService 无效(甚至可能是愚蠢的尝试)。我唯一考虑的另一件事是制作 MyService 的 "new"。

即使只有 link 或我能找到答案的书,也请帮忙。先谢谢你。

您可以通过仅创建 MyServicenew 实例来实现,除非您有 implicitDAO 对象并且您可以直接注入 class 进入你的测试规范。

我不知道有没有可能通过依赖注入来管理测试套件。 (class MyTestSpec Inject()(myService: MyService) 表明您正在尝试这样做。

但您可以轻松地从应用程序中获取服务实例。这是 Guice 的示例:

import org.scalatestplus.play.PlaySpec
import org.scalatestplus.play.guice.GuiceOneServerPerSuite

class MyTestSpec extends PlaySpec with GuiceOneServerPerSuite {

  "MyService" should {
    "make something good" in {

      val service = app.injector.instanceOf[MyService]
      service.methodIWantToCallInTests

    }
  }

}