Playframework Slick:在测试用例中自动生成H2-DDL
我在我的应用程序和dev/prod中使用了slick 2.0.0,它运行良好 在测试模式下,我想自动生成一个H2数据库(使用光滑的表定义),并将其用于我的测试用例。我使用scalatest 2.0 测试的数据库定义(application.conf)如下Playframework Slick:在测试用例中自动生成H2-DDL,playframework,h2,slick,play-slick,Playframework,H2,Slick,Play Slick,我在我的应用程序和dev/prod中使用了slick 2.0.0,它运行良好 在测试模式下,我想自动生成一个H2数据库(使用光滑的表定义),并将其用于我的测试用例。我使用scalatest 2.0 测试的数据库定义(application.conf)如下 db{ ... test { driver=org.h2.Driver url="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" } } 在测试用例开始时,我调用 Slick.db.with
db{
...
test {
driver=org.h2.Driver
url="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"
}
}
在测试用例开始时,我调用
Slick.db.withTransaction { implicit s =>
StaticQuery.updateNA("DROP ALL OBJECTS;")
val createStatement = models.slick.Tables.ddl.createStatements.mkString("",";",";")
println("CREATE: "+createStatement)
StaticQuery.updateNA(createStatement)
}
(在测试模式下,Slick.db指向play Slick插件中的db(“test”),因此它只接受db.test中application.conf中定义的数据源)
运行测试用例时,我得到以下输出:
CREATE: [...]; create table `mytable` (`field1` VARCHAR(254) NOT NULL,`field2` VARCHAR(254) NOT NULL,`field3` VARCHAR(254) NOT NULL,`ID` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY); [...]
[info] - should [...] *** FAILED ***
[info] org.h2.jdbc.JdbcSQLException: Tabelle "MYTABLE" nicht gefunden
[info] Table "MYTABLE" not found; SQL statement:
[info] INSERT INTO `mytable` (`field1`,`field2`,`field3`) VALUES (?,?,?) [42102-172]
[info] at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
[info] at org.h2.message.DbException.get(DbException.java:169)
[info] at org.h2.message.DbException.get(DbException.java:146)
[info] at org.h2.command.Parser.readTableOrView(Parser.java:4824)
[info] at org.h2.command.Parser.readTableOrView(Parser.java:4802)
[info] at org.h2.command.Parser.parseInsert(Parser.java:966)
[info] at org.h2.command.Parser.parsePrepared(Parser.java:375)
[info] at org.h2.command.Parser.parse(Parser.java:279)
[info] at org.h2.command.Parser.parse(Parser.java:251)
[info] at org.h2.command.Parser.prepareCommand(Parser.java:218)
[info] ...
[info] ScalaTest
因此它肯定会创建表并访问同一个表(尽管是大写)。这个案子有问题吗?别这么想。我怎样才能做到这一点
如果案例有问题,有没有办法告诉slick生成或使用具有相同案例的表?必须这样做
StaticQuery.updateNA(createStatement).execute
而不是
StaticQuery.updateNA(createStatement)