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

scala – 在内存db play框架中运行测试

发布时间:2020-12-16 18:28:12 所属栏目:安全 来源:网络整理
导读:我正在尝试为我的应用程序运行一些测试. 应该可以在一个全新的内存数据库中运行测试,但我不会让它工作. 我的测试现在看起来像这样: "Server" should {"persist data for personal user properly" in { running(FakeApplication(additionalConfiguration = i
我正在尝试为我的应用程序运行一些测试.
应该可以在一个全新的内存数据库中运行测试,但我不会让它工作.

我的测试现在看起来像这样:

"Server" should {

"persist data for personal user properly" in {
  running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {

    //Create personal users
    val add1 = route(FakeRequest(POST,"/rest/personaluser").withFormUrlEncodedBody("name" -> "user1","email" -> "email@test1.com","password" -> "test123","gender" -> "male","birthdate" -> "Oct 1,2013","nationality" -> "Sweden")).get
    val add2 = route(FakeRequest(POST,"/rest/personaluser").withFormUrlEncodedBody("name" -> "user2","email" -> "email@test2.com","nationality" -> "Sweden")).get
    status(add1) must equalTo(OK)
    status(add2) must equalTo(OK)

    //Count users
    personalUserRepository.getAllPersonalUsers().length must beEqualTo(2)

    //Verify users exist
    personalUserRepository.checkIfPersonalUserExists("email@test1com") must beTrue
    personalUserRepository.checkIfPersonalUserExists("email@test2com") must beTrue

    //Verify user don't exist
    personalUserRepository.checkIfPersonalUserExists("email@test3com") must beFalse

    //Find user by email
    val findUser = route(FakeRequest(GET,"/rest/personaluserbyemail/email@test1.com")).get
    status(findUser) must equalTo(OK)
    contentAsString(findUser) must /("name" -> "user1")
    contentAsString(findUser) must /("email" -> "email@test1.com")
    contentAsString(findUser) must /("gender" -> "male")
    contentAsString(findUser) must /("nationality" -> "Sweden")
    contentAsString(findUser) must /("facebookID" -> "0")

  }
 }
}

当我运行这个时,我得到错误InconsistentDatabase:数据库’default’处于不一致状态!
这是因为标准inMemoryDB可能不支持我用于默认数据库的MySQL吗?

但是,我尝试添加像这样的memoryDB:

在这里定义它

def memoryDB = Map("db.default.url" -> "jdbc:h2:mem:playdb;MODE=MYSQL;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;TRACE_LEVEL_SYSTEM_OUT=1")

并像这样使用它:

"Server" should {

"persist data for personal user properly" in {
  running(FakeApplication(additionalConfiguration = memoryDB)) {

但是当我这样做时,它不使用内存db,测试失败//计数用户因为它不等于2,而是7.它无论如何都使用真实数据库,而不是我新的内存数据库我尝试在这个FakeApplication中使用.

我做错了什么或我错过了什么?

任何能让我走上正轨的答案都非常感谢!
谢谢!

解决方法

我首先要说的是我对Play不熟悉.您从未提及如何配置JDBC驱动程序.我怀疑在测试模式下,应用程序仍在使用针对H2 DB的MySQL驱动程序类.您还需要测试类路径中的H2 jar文件.

(编辑:李大同)

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

    推荐文章
      热点阅读