0
我使用的游戏框架ANORM和我有以下服务类:PlayFramework:如何注入数据库对象
@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")
}
}
}
}
有什么建议?
谢谢,这对于服务类很有用。但是,我无法在Integration测试中使用测试数据库。我已经将我的测试课程添加到了问题中。在应用进化时,它会尝试应用到“默认”数据库(在application.conf中配置),而不是在测试套件中定义的测试数据库。任何帮助深表感谢。 –