gpt4 book ai didi

scala - 当我运行我的测试套件时,它们因 PSQLException : FATAL: sorry, 已经有太多客户端而失败

转载 作者:行者123 更新时间:2023-12-01 10:40:45 26 4
gpt4 key购买 nike

我正在为我的 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 应用程序。我也尝试手动关闭所有数据库的连接,但没有解决问题。

最佳答案

我们遇到了同样的问题,所以我们将这 2 个用例分开(运行所有或只运行一个测试套件)。

这使得运行所有测试更快 - 因为 Play Environment 只启动一次。

套房看起来像:

class AcceptanceSpecSuite
extends PlaySpec
with GuiceOneAppPerSuite
with BeforeAndAfter {

// all specs
override def nestedSuites: immutable.IndexedSeq[AcceptanceSpec] = Vector(
// api
new DatabaseTaskSpec,
new HistoryPurgeTaskSpec,
...
)


override def fakeApplication(): Application =
// your initialization
}

现在每个 Spec 看起来像:

@DoNotDiscover // important that it is run only if called explicitly
class DatabaseTaskSpec extends AcceptanceSpec {
...

父类现在我们可以在 GuiceOneServerPerSuiteConfiguredApp 之间切换:

trait AcceptanceSpec
extends PlaySpec
you need:
// with GuiceOneServerPerSuite // if you want to test only one Test
with ConfiguredApp // if you want to test all
with Logging
with ScalaFutures
with BeforeAndAfter {
...

我知道这有点 hack - 所以我也对更优雅的解决方案感兴趣;)。

关于scala - 当我运行我的测试套件时,它们因 PSQLException : FATAL: sorry, 已经有太多客户端而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55478085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com