2014-02-20 36 views
0

我想在不改变数据库的情况下运行模型测试。 我正在使用没有进化的mysql数据库。在测试中指定数据库

是否可以为我的测试指定不同的数据库?或者将mysql模式复制到内存数据库中?

我试图使一个单独的配置和使用它像这样:

play test -Dconfig.resource=application.test.conf 

没有利润。

+0

是不是'-Dconfig.file = application.test.conf'? – Carsten

回答

1

您可以使用多个数据库在应用程序中。在这里我给例如在应用三个数据库(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数据库。

+0

如何为我的测试数据库设置架构(从开发副本)? –

+1

创建数据库模式脚本(从开发或如你所愿)例如mysql.sql和: db.default.url =“”“jdbc:h2:mem:mysqldb; MODE = MySQL; IGNORECASE = TRUE; INIT = RUNSCRIPT FROM 'scriptdirpath/mysql.sql'“”“ – Sky

+0

谢谢。我最终使用了演变。 –