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

Play中的装置! 2为Scala

发布时间:2020-12-16 08:49:27 所属栏目:安全 来源:网络整理
导读:我正在尝试在Play中进行一些集成测试! 2用于 Scala应用程序.为此,我需要在每次测试之前加载一些灯具以使DB处于已知状态. 目前,我只是调用一个执行一堆Squeryl语句来加载数据的方法.但是声明性地声明灯具,无论是使用Scala DSL还是使用JSON或YAML等语言,都更
我正在尝试在Play中进行一些集成测试! 2用于 Scala应用程序.为此,我需要在每次测试之前加载一些灯具以使DB处于已知状态.

目前,我只是调用一个执行一堆Squeryl语句来加载数据的方法.但是声明性地声明灯具,无论是使用Scala DSL还是使用JSON或YAML等语言,都更容易理解.

在Java应用程序的this example中,我看到夹具是从YAML文件加载的,但是equivalent Scala应用程序采用了manula加载,就像我现在正在做的那样.

我还发现this project没有很好的记录,它看起来比我想要的复杂一点 – 我甚至不清楚实际声明夹具数据的位置.

Are there any other options to load fixtures in a Play! application?

解决方法

使用进化.在SQL中编写夹具的设置和拆卸脚本,或使用mysqldump(或数据库的等效脚本)将现有测试DB导出为sql.

http://www.playframework.org/documentation/1.2/evolutions

我发现最无压力的测试方法是在内存数据库中设置所有内容,这意味着测试运行速度很快,并使用JUnit从Java驱动测试.我使用的是H2DB,但是你需要注意一些问题.我学到了很多东西,所以这可以节省你一些时间.

Play有一个很好的系统,用于设置和拆除应用程序进行集成测试,使用running(FakeAplication()){..},你可以配置它使用内存数据库和FakeApplication(additionalConfiguration = inMemoryDatabase()) :

http://www.playframework.org/documentation/2.0/ScalaTest

OutOfMemory错误:但是,在我的机器上运行几次相当大的测试夹具会导致OutOfMemory错误.这似乎是因为inMemoryDatabase()函数的默认实现创建了一个新的随机命名数据库,并且不会在测试运行之间清理旧数据库.如果您正确编写了进化拆卸脚本,则不需要这样做,因为数据库将在每次测试之间清空并重新填充.因此,我们覆盖此行为以使用相同的数据库,并且内存问题消失了.

DB Dialect:另一个问题是我们的生产数据库是MySQL,它与H2DB有许多不兼容的地方. H2DB具有多个dbs的兼容模式,这可以减少您遇到的问题数量:

http://www.h2database.com/html/features.html#compatibility

将这一切放在一起使得在每次测试之前添加它有点笨拙,所以我将它提取到一个函数中:

def memDB[T](code: =>T) = 
  running( FakeApplication( additionalConfiguration = Map( 
    "db.default.driver" -> "org.h2.Driver","db.default.url"    -> "jdbc:h2:mem:test;MODE=MySQL" 
  ) ) )(code)

然后您可以像这样使用它(规范示例):

"My app" should {
  "integrate nicely" in memDB {
    .....
  }
}

每个测试都会启动一个假的应用程序,运行你的夹具设置evolutions脚本,运行测试,然后再将它全部拆掉.祝好运!

(编辑:李大同)

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

    推荐文章
      热点阅读