如何使用Play 2.x对MySQL数据库进行单元测试?

时间:2013-02-28 22:13:43

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

我需要测试我的代码是否创建了正确的数据库语句。我知道我可以使用内存数据库运行我的应用程序。它并不完美,但足以满足这个项目的需要。我的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特定语法的问题?

1 个答案:

答案 0 :(得分:10)

我找到了解决(大多数)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样式注释。