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

scala – 使用specs2和FakeApplication()来测试数据库失败的进化

发布时间:2020-12-16 18:43:23 所属栏目:安全 来源:网络整理
导读:这是为了玩!框架2.0. 我正在尝试编写一个简单的测试用例,以确保我的用户模型正常运行并在我的数据库中保存数据.如果可能的话,我想在内存中运行它,这样我就可以在每次新的运行中重新开始. 我遇到的问题是我的演变运行(表格已创建,数据已插入,但我不能将其视
这是为了玩!框架2.0.

我正在尝试编写一个简单的测试用例,以确保我的用户模型正常运行并在我的数据库中保存数据.如果可能的话,我想在内存中运行它,这样我就可以在每次新的运行中重新开始.

我遇到的问题是我的演变运行(表格已创建,数据已插入,但我不能将其视为存在).首先,我的代码.

CREATE TABLE user_data (
id SERIAL PRIMARY KEY,user_name varchar(256) UNIQUE NOT NULL,email varchar(256) NOT NULL,password varchar(256) NOT NULL,edits int NOT NULL,reports int NOT NULL,active BOOLEAN NOT NULL);

INSERT INTO user_data(user_name,email,password,edits,reports,active) VALUES ('user1','user1@email.com','12345678',true);

在application.conf中

db.default.driver=org.postgresql.Driver
db.default.url="postgres://user:password@localhost:5432/ME"

在build.scala中

val appDependencies = Seq(
  // Add your project dependencies here,"postgresql" % "postgresql" % "9.1-901-1.jdbc4"
)

测试代码

class User_dataSpec extends Specification {

  "The Database" should {
    "persist data properly" in {
  running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {

      //User_data.findAll().length must beEqualTo(1)
      //Create users
      User_data.create("user1","password1","email@test1.com") must beEqualTo(1)
      User_data.create("user2","password2","email@test2.com") must beEqualTo(2)
      User_data.create("user1","password3","email@test3.com") must beEqualTo(0)

      //Count users
      User_data.findAll().length must beEqualTo(2)

      //Verify users exist
      User_data.exists("user1") must beTrue
      User_data.exists("user2") must beTrue

      //Verify user doesn't exist
      User_data.exists("user3") must beFalse

      //Find users by ID
      User_data.findUser(1).get.user_name must beEqualTo("user1")
      User_data.findUser(2).get.user_name must beEqualTo("user2")

      //Fail to find users by ID
      User_data.findUser(3) must beNone

      //Find users by user_name
      User_data.findUser("user1").get.user_name must beEqualTo("user1")
      User_data.findUser("user2").get.user_name must beEqualTo("user2")

      //Fail to find users by user_name
      User_data.findUser("user3") must beNone

      //Authenticate users
      User_data.authenticate("user1","password1") must beTrue
      User_data.authenticate("user2","password2") must beTrue

      //Fail to authenticate users
      User_data.authenticate("user1","password2") must beFalse
      User_data.authenticate("user3","passwordX") must beFalse

      //Confirm the user was inserted properly
      val user = User_data.findUser("user1")
      user.get.user_name must beEqualTo("user1")
      user.get.email must beEqualTo("email@test1.com")
      user.get.password must beEqualTo("password1")
      user.get.edits must beEqualTo(0)
      user.get.reports must beEqualTo(0)
      user.get.active must beTrue
      }
    }
  }
}

此代码将按写入方式传递,但不应该.如果我取消注释运行块中的第一个测试用例以测试我的findAll()函数应该是1的长度,它将立即失败.但是,如果我将其更改为在我的机器上使用持久化的PostgreSQL数据库,它仍然会立即失败,但是当我查看PostgreSQL数据库时,我的user_data表中插入了单个进化插入,并且play_evolutions表具有该条目为了我的进化而被标记为state =“applied”和last problem =“”.

任何帮助将不胜感激,谢谢.

(P.S.,我是第一次发布海报,但会尽快为那些愿意提供帮助的人尽快接受答复)

解决方法

* 更新 *

正如Jakob所说,进化失败的原因可能是因为为MySQL编写的SQL与H2DB不兼容.您可以通过使用单独的MySQL根据原始答案进行测试来解决此问题,或者将H2DB置于MySQL兼容模式中,这可以解决问题(参见Fixtures in Play! 2 for Scala).

(编辑:李大同)

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

    推荐文章
      热点阅读