加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Play框架中的集成测试

发布时间:2020-12-16 10:04:00 所属栏目:安全 来源:网络整理
导读:我试图让集成测试在Play Framework 2.1.1中运行 我的目标是能够在单元测试后运行集成测试,以测试底层数据库的组件级功能.底层数据库将具有存储过程,因此我必须做的不仅仅是您可以在伪应用程序中配置的“inMemoryDatabase”. 我希望这个过程是: 使用FakeAppl
我试图让集成测试在Play Framework 2.1.1中运行

我的目标是能够在单元测试后运行集成测试,以测试底层数据库的组件级功能.底层数据库将具有存储过程,因此我必须做的不仅仅是您可以在伪应用程序中配置的“inMemoryDatabase”.

我希望这个过程是:

>使用FakeApplication启动TestServer.使用备用集成测试配置文件
>运行集成测试(可以按包过滤或不在此处)
>停止TestServer

我相信最好的方法是在Build.scala文件中.

我需要有关如何设置Build.scala文件的帮助,以及如何加载替代集成测试配置文件(project / it.conf)

非常感谢任何帮助!

解决方法

我已经介绍了一种暂时可行的方法.我想看看Play在sbt中引入了单独的“Test”与“IntegrationTest”范围的概念.

我可以进入Play,看看他们如何在sbt中构建他们的项目和设置,并尝试使IntegrationTest范围工作.现在,我花了太多时间试图让它运作起来.

我所做的是创建一个Specs Around Scope类,使我能够强制执行TestServer的单例实例.使用该类的任何内容都将尝试启动测试服务器,如果它已在运行,则不会重新启动它.

似乎Play和SBT在确保服务器在测试结束时关闭时做得很好,这到目前为止是有效的.

这是示例代码.仍希望得到更多反馈.

class WithTestServer(val app: FakeApplication = FakeApplication(),val port: Int = Helpers.testServerPort) extends Around with Scope {
      implicit def implicitApp = app
      implicit def implicitPort: Port = port

      synchronized {
        if ( !WithTestServer.isRunning ) {
          WithTestServer.start(app,port)
        }
      }

      // Implements around an example
      override def around[T: AsResult](t: => T): org.specs2.execute.Result = {
        println("Running test with test server===================")
        AsResult(t)
      }
    }

    object WithTestServer {

      var singletonTestServer: TestServer = null

      var isRunning = false

      def start(app: FakeApplication = FakeApplication(),port: Int = Helpers.testServerPort) = {
          implicit def implicitApp = app
          implicit def implicitPort: Port = port
          singletonTestServer = TestServer(port,app)
          singletonTestServer.start()
          isRunning = true
      }

    }

为了更进一步,我只需在play / test文件夹中设置两个文件夹(包):
– test / unit(test.unit包)
– 测试/集成(test.integration pacakage)

现在,当我从Jenkins服务器运行时,我可以运行:

play test-only test.unit.*Spec

这将执行所有单元测试.

要运行我的集成测试,我运行:

play test-only test.integration.*Spec

而已.这对我来说暂时适用,直到Play添加集成测试作为生命周期步骤.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读