我想在不改变数据库的情况下运行模型测试。 我正在使用没有进化的mysql数据库。在测试中指定数据库
是否可以为我的测试指定不同的数据库?或者将mysql模式复制到内存数据库中?
我试图使一个单独的配置和使用它像这样:
play test -Dconfig.resource=application.test.conf
没有利润。
我想在不改变数据库的情况下运行模型测试。 我正在使用没有进化的mysql数据库。在测试中指定数据库
是否可以为我的测试指定不同的数据库?或者将mysql模式复制到内存数据库中?
我试图使一个单独的配置和使用它像这样:
play test -Dconfig.resource=application.test.conf
没有利润。
您可以使用多个数据库在应用程序中。在这里我给例如在应用三个数据库(PROD,开发,测试)生产
写的conf文件(在conf目录)
prod.conf
include "application.conf"
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost:5432/productiondatabase"
db.default.user="postgres"
db.default.password="postgres"
写的conf文件为发展
dev.conf
include "application.conf"
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost:5432/developmentdatabase"
db.default.user="postgres"
db.default.password="postgres"
测试写的conf文件
test.conf
include "application.conf"
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:test"
db.default.user=sa
db.default.password=""
现在写Global.scala(在app目录)
import play.api._
import play.api.Logger
import com.typesafe.config.ConfigFactory
import java.io.File
object Global extends GlobalSettings {
override def onLoadConfig(config: Configuration, path: File, classloader: ClassLoader,mode: Mode.Mode): Configuration = {
Logger.info("Application configuration file is loading with " + mode.toString + " mode")
val modeSpecificConfig = config ++ Configuration(ConfigFactory.load(s"${mode.toString.toLowerCase}.conf"))
super.onLoadConfig(modeSpecificConfig, path, classloader, mode)
}
}
$播放测试=>它自动连接到测试数据库。
$ play run =>它会自动连接到dev数据库。
$ play start =>它自动连接到prod数据库。
如何为我的测试数据库设置架构(从开发副本)? –
创建数据库模式脚本(从开发或如你所愿)例如mysql.sql和: db.default.url =“”“jdbc:h2:mem:mysqldb; MODE = MySQL; IGNORECASE = TRUE; INIT = RUNSCRIPT FROM 'scriptdirpath/mysql.sql'“”“ – Sky
谢谢。我最终使用了演变。 –
是不是'-Dconfig.file = application.test.conf'? – Carsten