如何通过Play框架将服务类注入Spec类

时间:2019-01-24 15:30:17

标签: scala testing playframework

我正在尝试为Scala播放应用程序编写测试,但由于无法将MyService注入类规范(以下示例代码)而陷入困境。

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

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的“新版”。

即使仅提供链接或书籍也请提供帮助,我可以在其中找到答案。谢谢您。

2 个答案:

答案 0 :(得分:1)

我不知道通过依赖项注入来管理测试套件本身的任何可能性。 (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

    }
  }

}

答案 1 :(得分:0)

您只能通过创建new的{​​{1}}实例来做到这一点,除非您有MyService个对象中有implicit个,并且可以将类直接注入到testspec中。