【发布时间】:2017-01-02 18:26:39
【问题描述】:
我正在使用 anorm 作为游戏框架,并且我有以下服务类:
@javax.inject.Singleton
class ProductService @Inject() (dbApi: DBApi) {
private val DB = dbApi.database("default")
def save(product: Product) = {
DB.withConnection { implicit connection =>
....
}
}
}
这里有两个问题:
1) 我不想在每个服务类中添加private val DB = dbApi.database("default") 行。抽象这个的最好方法是什么?
2) 我还想配置数据源,以便在编写集成测试时通过测试数据源
测试类:
import models.ProductService
import org.scalatestplus.play.{OneAppPerSuite, PlaySpec}
import play.api.db.Databases
class ProductSpec extends PlaySpec with OneAppPerSuite {
var productService: ProductService = app.injector.instanceOf(classOf[ProductService])
Databases.withDatabase(
driver = "com.mysql.jdbc.Driver",
url = "jdbc:mysql://localhost/playtest",
config = Map(
"user" -> "test",
"password" -> "demo"
)
) { database =>
import play.api.db.evolutions._
Evolutions.applyEvolutions(database)
"Product" should {
"be retrieved by Id" in {
val product = productService.get(23)
product.get.name must equal("mobile")
}
}
}
}
有什么建议吗?
【问题讨论】:
标签: scala playframework