English 中文(简体)
使用 speces2 和 FakeApplication () 测试数据库失败进化插入
原标题:Using specs2 and FakeApplication() to test database fails evolution inserts

这是为游戏准备的! 框架 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 ,  [email protected] ,  12345678 , 0, 0, true);

在应用程序中. conf

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

在建设中.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 protected]") must beEqualTo(1)
      User_data.create("user2", "password2", "[email protected]") must beEqualTo(2)
      User_data.create("user1", "password3", "[email protected]") 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 protected]")
      user.get.password must beEqualTo("password1")
      user.get.edits must beEqualTo(0)
      user.get.reports must beEqualTo(0)
      user.get.active must beTrue
      }
    }
  }
}

此代码会以书面方式通过, 但无论如何它应该通过 。 如果我在运行区内卸载第一个测试插件, 测试我的发现All() 函数的长度为 1, 它会立即失败 。 但是, 如果我将它修改为在机器上使用一个持续存在的 PostgreSQL DB, 它仍然会立即失败, 但是当我查看 PostgreSQL DB 时, 我的用户数据表格有它所应用的单一进化, 并且播放- 演进表有我进化的条目, 并标记为状态 = “ 应用” 和最后一个问题 =“ ” 。

任何帮助都会感激不尽,谢谢。

(P.S.,我是第一张海报,但将尽我最大的努力尽快接受那些愿意提供帮助的人的答复)

最佳回答

<% 1\ \ \ / % 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \\ \ \ \ \\ \\ \ \ \\\\ \\\ \\\ \ \ \ \\\\\\\\ \\\ \\\ \\\\ \ \\\\ \\\\\ \\\ \\ \\\\\ \\\\ \\\ \\\\\\\ \\\\

正如Jakob所说,进化失败的原因很可能是因为为 MySQL 编写的 SQL 与 H2DB 不符。 您可以使用一个单独的 MySQL 来根据原始答案进行测试, 或者将 H2DB 放到 MySQL 兼容模式中, 从而解决问题(见