Tôi đang cố gắng làm theo một cách thành ngữ nhất để có một vài dịch vụ DAO được kiểm tra đầy đủ.Play Framework and Slick: kiểm tra các dịch vụ liên quan đến cơ sở dữ liệu
Tôi đã có một vài lớp học trường hợp như sau:
case class Person (
id :Int,
firstName :String,
lastName :String
)
case class Car (
id :Int,
brand :String,
model :String
)
Sau đó, tôi đã có một lớp DAO đơn giản như thế này:
class ADao @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
private val persons = TableQuery[PersonTable]
private val cars = TableQuery[CarTable]
private val personCar = TableQuery[PersonCar]
class PersonTable(tag: Tag) extends Table[Person](tag, "person") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def firstName = column[String]("name")
def lastName = column[String]("description")
def * = (id, firstName, lastName) <> (Person.tupled, Person.unapply)
}
class CarTable(tag: Tag) extends Table[Car](tag, "car") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def brand = column[String]("brand")
def model = column[String]("model")
def * = (id, brand, model) <> (Car.tupled, Car.unapply)
}
// relationship
class PersonCar(tag: Tag) extends Table[(Int, Int)](tag, "person_car") {
def carId = column[Int]("c_id")
def personId = column[Int]("p_id")
def * = (carId, personId)
}
// simple function that I want to test
def getAll(): Future[Seq[((Person, (Int, Int)), Car)]] = db.run(
persons
.join(personCar).on(_.id === _.personId)
.join(cars).on(_._2.carId === _.id)
.result
)
}
Và application.conf của tôi trông giống như :
slick.dbs.default.driver="slick.driver.PostgresDriver$"
slick.dbs.default.db.driver="org.postgresql.Driver"
slick.dbs.default.db.url="jdbc:postgresql://super-secrete-prod-host/my-awesome-db"
slick.dbs.default.db.user="myself"
slick.dbs.default.db.password="yolo"
Bây giờ bằng cách đi qua Testing with databases và cố gắng bắt chước play-slick sample project Tôi đang gặp rất nhiều rắc rối và dường như tôi không hiểu làm thế nào để làm cho bài kiểm tra của tôi sử dụng một cơ sở dữ liệu khác (tôi cho rằng tôi cần phải thêm một db khác vào tệp conf của tôi, nói slick.dbs.test
) làm thế nào để tiêm mà bên trong thử nghiệm.
Ngoài ra, trên mẫu repo, có một số "ma thuật" như Application.instanceCache[CatDAO]
hoặc app2dao(app)
.
Ai có thể chỉ cho tôi một số ví dụ chính thức về hoặc repo giao dịch chính xác với thử nghiệm chơi và bóng bẩy?
Cảm ơn.