首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在游戏规范测试中插入json夹具数据?

如何在游戏规范测试中插入json夹具数据?
EN

Stack Overflow用户
提问于 2014-05-30 20:19:57
回答 1查看 797关注 0票数 0

我有一个Scala 2.2.2应用程序,作为我的规范测试的一部分,我想插入一些夹具数据,以便进行测试,最好采用json格式。在测试中,我使用了内存中常用的H2数据库。我怎样才能做到这一点?我搜索了所有的文件,但在任何地方都没有提到这一点。

请注意,我不希望通过Global构建自己的夹具实现风格。应该有个不讨厌的方法来解决这个问题吧?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-30 21:33:15

AFAIK没有内置的东西可以做到这一点,ala Rails,很难想象如果不让Play Scala更固执己见地处理持久化(我个人认为这是负面的),开发人员能做什么。

我还使用H2来测试和使用资源文件中的普通SQL夹具,并在测试之前使用几个(相当简单的)帮助程序加载它们:

代码语言:javascript
复制
package object helpers {

  import java.io.File
  import java.sql.CallableStatement
  import org.specs2.execute.{Result, AsResult}
  import org.specs2.mutable.Around
  import org.specs2.specification.Scope
  import play.api.db.DB
  import play.api.test.FakeApplication
  import play.api.test.Helpers._

  /**
   * Load a file containing SQL statements into the DB.
   */
  private def loadSqlResource(resource: String)(implicit app: FakeApplication) = DB.withConnection { conn =>
    val file = new File(getClass.getClassLoader.getResource(resource).toURI)
    val path = file.getAbsolutePath
    val statement: CallableStatement = conn.prepareCall(s"RUNSCRIPT FROM '$path'")
    statement.execute()
    conn.commit()
  }

  /**
   * Run a spec after loading the given resource name as SQL fixtures.
   */
  abstract class WithSqlFixtures(val resource: String, val app: FakeApplication = FakeApplication()) extends Around with Scope {
    implicit def implicitApp = app
    override def around[T: AsResult](t: => T): Result = {
      running(app) {
        loadSqlResource(resource)
        AsResult.effectively(t)
      }
    }
  }
}

然后,在您的实际规范中,您可以这样做:

代码语言:javascript
复制
package models

import helpers.WithSqlFixtures
import play.api.test.PlaySpecification

class MyModelSpec extends PlaySpecification {
  "My model" should {
    "locate items correctly" in new WithSqlFixtures("model-fixtures.sql") {
      MyModel.findAll().size must beGreaterThan(0)
    }
  }
}

注意:这个specs2可能会更好。

显然,如果您真的需要JSON,您将不得不添加额外的机器来反序列化模型并将它们保存在数据库中(通常在应用程序中,您无论如何都要做这些事情,在这种情况下可能比较琐碎)。

你还需要:

  • conf/evolutions/default中建立数据库模式的一些进展
  • 启用演化插件,它将在FakeApplication启动时构建模式。
  • 适当的H2 DB配置
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23962791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档