如何使用 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 或我能找到答案的书,也请帮忙。先谢谢你。
您可以通过仅创建 MyService
的 new
实例来实现,除非您有 implicit
个 DAO
对象并且您可以直接注入 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
}
}
}
我正在尝试为 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 或我能找到答案的书,也请帮忙。先谢谢你。
您可以通过仅创建 MyService
的 new
实例来实现,除非您有 implicit
个 DAO
对象并且您可以直接注入 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
}
}
}