我有以下Play for Scala Controller注入JDBC连接:
class MyController @Inject() (db1: play.api.db.Database) extends Controller {
// some code
}
在我的application.conf
我有相关的配置:
# JDBC configuration
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/db0001"
db.default.username=root
db.default.password=xxxxxxx
现在,我需要的是在ScalaTest测试中注入一个不同的数据库(也在application.conf
中定义)。应在测试中声明如下:
val controller = new MyController (mockDB)
如何实现这一目标?
答案 0 :(得分:0)
声明如下:
val mockDB = Databases(
driver = "com.mysql.jdbc.Driver",
url = "jdbc:mysql://localhost/db0001"
)
答案 1 :(得分:0)
val config : Config = ConfigFactory.parseString(
"""test-db {
| driver = "slick.driver.H2Driver$"
| db = {
| driver = "org.h2.Driver"
| url = "jdbc:h2:mem:testDB"
| }
|}
|""".stripMargin)
val dbConfig: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig[JdbcProfile]("test-db", config)
val db = dbConfig.db
lazy val app = new GuiceApplicationBuilder()
.overrides(bind[Database].toInstance(db))
.build
答案 2 :(得分:0)
您应该问自己:
如果对#2的回答为“是”,则可以使用ScalaMock
class Test extends MockFactory {
val mockDB = mock[DatabaseConfig[JdbcProfile]]
(mockDb.db.run _) expects(*) returning(/*The value you want to return goes here*/)
val controller = new MyController(mockDB)
}