我正在尝试让集成测试在Play Framework 2.1.1中运行
我的目标是能够在单元测试后运行集成测试,以测试底层数据库的组件级功能。底层数据库将具有存储过程,因此我必须做的不仅仅是您可以在伪造应用程序中配置的“inMemoryDatabase”。
我希望这个过程是:
我认为最好的方法是在Build.scala文件中。
我需要有关如何设置Build.scala文件的帮助,以及如何加载替代集成测试配置文件(项目/ it.conf现在)
非常感谢任何帮助!
答案 0 :(得分:5)
我已经介绍了一种暂时适用的方法。我想看看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将集成测试添加为生命周期步骤。
答案 1 :(得分:0)
此问题的答案在这篇博文中分享https://blog.knoldus.com/integration-test-configuration-in-play-framework/
基本上,在 build.sbt 中:
// define a new configuration
lazy val ITest = config("it") extend(Test)
/// and add it to your project:
lazy val yourProject = (project in file("yourProject"))
.configs(ITest)
.settings(
inConfig(ITest)(Defaults.testSettings),
scalaSource in ITest := baseDirectory.value / "/it",
[the rest of your configuration comes here])
.enablePlugins(PlayScala)
刚刚在 2.8.3 中对此进行了测试,效果很好。
使用 sbt 启动您的 IT:
[yourProject] $ it:test