【问题标题】:How can I unit test for MySQL database with Play 2.x?如何使用 Play 2.x 对 MySQL 数据库进行单元测试?
【发布时间】:2013-02-28 22:13:43
【问题描述】:

我需要测试我的代码是否创建了正确的数据库语句。我知道我可以使用内存数据库运行我的应用程序。它并不完美,但对于这个项目来说已经足够了。我的 SQL 包含 MySQL 特定的东西。

当我运行测试时,它会中断包含以下内容的演变:

CREATE TABLE `Beaches` (
  `id` INT(10) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)
)
ENGINE=InnoDB;
COLLATE='utf8_general_ci'

如何解决 MySQL 特定语法的问题?

【问题讨论】:

  • "Is there a jdbc mock library" 你的意思是模拟模型类,这样就可以在没有真实数据库的情况下使用模型吗?然后可以使用诸如 mockito 之类的通用 moch 库。
  • 不,我的意思是模拟 jdbc 连接。这样我就可以询问执行了哪些 SQL 语句并可能影响结果。

标签: mysql database unit-testing playframework-2.0 playframework-2.1


【解决方案1】:

我找到了一种方法来解决(大多数)MySQL 特定的问题(问题 1。)

running(FakeApplication(additionalConfiguration = 
  inMemoryDatabase(options=Map("MODE" -> "MySQL")))) {

  DB.withConnection { implicit c =>
    SQL("""
        CREATE TABLE `Beaches` (
          `id` INT(10) NOT NULL AUTO_INCREMENT,
          `name` VARCHAR(255) NOT NULL,
          PRIMARY KEY (`id`)
        )
        /*! ENGINE=InnoDB; */
        /*! COLLATE='utf8_general_ci' */
        """
    ).execute()
    ok
  }
}

请注意,H2 有一个 MODE=MySQL,如 Play 文档的 Working with the in-memory H2 database 部分所述。

另一部分是 MySQL 文档的 Comment Syntax 部分中描述的 c 样式 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多