ScalaTest 测试中的 Mock Play JDBC 连接
Mock Play JDBC connection in ScalaTest test
我有以下注入 JDBC 连接的 Play for Scala 控制器:
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)
如何实现?
这样声明:
val mockDB = Databases(
driver = "com.mysql.jdbc.Driver",
url = "jdbc:mysql://localhost/db0001"
)
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 的回答是 "yes",您可以使用 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)
}
我有以下注入 JDBC 连接的 Play for Scala 控制器:
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)
如何实现?
这样声明:
val mockDB = Databases(
driver = "com.mysql.jdbc.Driver",
url = "jdbc:mysql://localhost/db0001"
)
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 的回答是 "yes",您可以使用 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)
}