【发布时间】:2019-04-02 15:11:32
【问题描述】:
我正在为我的 Play 应用程序编写测试,我想在真实服务器上运行它们,这样我就可以伪造来自外部服务的所有答案。
为了做到这一点,我扩展了 PlaySpec 和 GuiceOneServerPerSuite,并重写了 fakeApplication 方法来创建我的路由并将它们提供给 Guice 应用程序
class MySpec extends PlaySpec with GuiceOneServerPerSuite {
override def fakeApplication(): Application =
GuiceApplicationBuilder().appRoutes(app => {
case ("POST", "/url/") => app.injector.instanceOf(classOf[DefaultActionBuilder]) { Ok }
}).globalApp(true).build()
"Something" should {
"work well" in {
val wsClient = app.injector.instanceOf[WSClient]
val service = new MyService(wsClient)
service.method() mustBe ""
app.injector.instanceOf[DBApi].databases().foreach(_.getConnection().close())
}
}
}
我有多个像这样的测试套件,如果我单独运行它们,它们工作正常,但如果我一起运行它们,它们会填满连接池,然后一切都失败了:org.postgresql.util.PSQLException: FATAL:抱歉,已经有太多客户了。
我的考虑:我认为这是因为在每个测试套件中都会创建一个新的 Play Guice 应用程序。我也尝试手动关闭所有数据库的连接,但没有解决问题。
【问题讨论】:
标签: scala playframework