如何在播放框架应用程序中进行完整的集成测试?

Posted

技术标签:

【中文标题】如何在播放框架应用程序中进行完整的集成测试?【英文标题】:How to do full integration tests in a play framework app? 【发布时间】:2015-10-10 18:21:11 【问题描述】:

我正在尝试为使用 play framework 2.4 和 scala 编写的应用程序编写测试。来源可here

我正在尝试编写适用于整个堆栈的测试。我们正在使用通过 REST API 提供的 neo4j 数据库。

这是我的测试:

package integration

import org.specs2.mutable._
import org.specs2.specification._
import play.api.test.Helpers._
import play.api.test._
import setup.TestSetup

class PublicAPISpec extends Specification with BeforeEach 

  def before = TestSetup.populateNeo4JData()

  "The score feedback badge api" should 
    "deliver a correct svg file" in 
      running(FakeApplication()) 
        val svg = route(FakeRequest(GET, "/api/badges/github/test/test.svg")).get

        status(svg) must equalTo(OK)
        contentType(svg) must beSome.which(_ == "image/svg+xml")
      
    
  

这是我的堆栈跟踪:

[info] The score feedback badge api should
[error]   ! deliver a correct svg file
[error]    There is no started application (Play.scala:71)
[error] play.api.Play$$anonfun$current$1.apply(Play.scala:71)
[error] play.api.Play$$anonfun$current$1.apply(Play.scala:71)
[error] play.api.Play$.current(Play.scala:71)
[error] setup.TestSetup$.setup$TestSetup$$cypher(TestSetup.scala:80)
[error] setup.TestSetup$.clearNeo4JData(TestSetup.scala:23)
[error] setup.TestSetup$.populateNeo4JData(TestSetup.scala:32)
[error] integration.PublicAPISpec.before(PublicAPISpec.scala:15)
[error] integration.PublicAPISpec.before(PublicAPISpec.scala:13)

编辑 事实证明,就像堆栈跟踪显然指出的主要问题在于 TestSetup 类。这个类依赖于一个播放应用程序来运行,而它不应该。经过一些重构后,它现在就像一个魅力。

【问题讨论】:

【参考方案1】:

要进行路由测试,您需要在测试中包含 Application 上下文。 测试应该从

开始
"deliver a correct svg file" in new WithApplication 
....

您可以在Play's page about functional tests 上查看更多信息。

【讨论】:

感谢您的回答,但我得到了完全相同的异常 这是在一个分支上,我只是推了它:here你去。感谢您的帮助! 我想我找到了问题的根源,这看起来像是在 before 方法中播放的依赖项。修复后将更新此帖子的状态

以上是关于如何在播放框架应用程序中进行完整的集成测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Spring + EasyMock做Java单元测试

如何在 intellij 中为播放框架应用程序运行单元测试

播放框架:如何将数据库演化应用到伪造的应用程序测试数据库

MSF

我应该如何设置我的集成测试以使用带有实体框架的测试数据库?

如何使用robolectric对Android音频录制应用进行单元测试