私はPlaySlickを使用してデータベースに接続する以下のDAOを持っています。クラスにはScalaTestでテストする必要があるメソッドread
があります。私の問題は、DatabaseConfigProvider
を模擬してUsersDAO
クラスに注入し、read
メソッドをテストする方法を知らないということです。これはテストのクラスです:ScalaTestでのPlaySlickデータベース接続の挿入
class UsersDAO @Inject()(@NamedDatabase("mydb")
protected val dbConfigProvider: DatabaseConfigProvider)
extends with HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
val db1 = dbConfigProvider.get[JdbcProfile].db
def read (sk: Int) = {
val users = TableQuery[UserDB]
val action = users.filter(_.sk === sk).result
val future = db1.run(action.asTry)
future.map{
case Success(s) =>
if (s.length>0)
Some(s(0))
else
None
case Failure(e) => throw new Exception ("Failure: " + e.getMessage)
}
}
}
、これはテストを書くための私の試みです:
class UserDAOTest extends PlaySpec with OneAppPerSuite {
implicit override lazy val app = new GuiceApplicationBuilder().
configure(
Configuration.from(
Map(
"slick.dbs.mydb.driver" -> "slick.driver.MySQLDriver$",
"slick.dbs.mydb.db.driver" -> "com.mysql.jdbc.Driver",
"slick.dbs.mydb.db.url" -> "jdbc:mysql://localhost:3306/control",
"slick.dbs.mydb.db.user" -> "root",
"slick.dbs.mydb.db.password" -> "xxxxx"
)
)
).build
val dbConfigProvider = app.injector.instanceOf[DatabaseConfigProvider]
"Example " should {
"be valid" in {
val controller = new UsersDAO(dbConfigProvider)
val result = controller.read(1)
println(result)
}
}
私はそれが次のエラーメッセージで失敗したテストを実行する場合:
com.google.inject.ConfigurationException: Guice configuration errors:
1) No implementation for play.api.db.slick.DatabaseConfigProvider was bound. while locating play.api.db.slick.DatabaseConfigProvider
正確に同じ問題で苦労=> http://stackoverflow.com/questions/41369252/scala-play-and-scalatest-directory-structure-mismatch –
'DatabaseConfigProvider.get [JdbcProfile](" mydb ")'? –
@ insan-eこれはエラーを投げます: 'type mismatch;見つかりました:slick.backend.DatabaseConfig [slick.driver.JdbcProfile]必須:play.api.db.slick.DatabaseConfigProvider' – ps0604