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

EEC*_*LOR 3 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'
Run Code Online (Sandbox Code Playgroud)

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

EEC*_*LOR 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
  }
}
Run Code Online (Sandbox Code Playgroud)

需要注意的是H2具有MODE=MySQL如所描述的与内存H2数据库工作的播放文件的部分.

另一部分是MySQL文档的Comment Syntax部分中描述的c样式注释.