Для людей, которые спешат, вот код и шаги .
В продолжении Play 2.x (Scala) это соперник Spring MVC? — Введение , в этом блоге, я покажу, как мы реализуем простой уровень доступа к данным, используя Scala Test и Behavior Driven Development .
Технический стек, который я буду использовать для этой демонстрации, — это Java 7 , Play 2.1.0 , Scala 2.10.0, Slick 1.0.0, ScalaTest / ScalaMock 3.0, STS IDE для Scala Development, плагин Scala IDE с ScalaTest .
В качестве первого шага создайте проект Play под названием coffee-example и выберите язык Scala, как показано ниже:
play new coffee-example
Теперь нам нужно включить эти зависимости в Build.scala. В этом примере нам не нужен ScalaMock, но мы все равно включим эту зависимость, как показано ниже:
"com.typesafe.slick" %% "slick" % "1.0.0", ... "org.scalamock" %% "scalamock-scalatest-support" % "3.0" % "test",
Давайте преобразуем этот проект в проект Eclipse, как показано ниже,
play eclipse
Давайте откроем STS IDE и создадим DomainTest.scala в тестовой папке. Намерение состоит в том, чтобы создать новый класс CoffeeComponent и реализовать метод findById, передать имя Coffee, вернуть объект Coffee и указать его цену. Нам также нужно инициализировать данные, которые мы должны утверждать.
class DomainSpec extends FunSpec with ShouldMatchers with InitTrait {
lazy val database = Database.forDataSource(DB.getDataSource())
describe("Coffee Data Access") {
it("should find Coffee object for a given Coffee name") {
running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
database withSession {
init
val cc = new CoffeeComponentImpl()
val c = cc.find("Colombian")
c.first.price should equal(799L)
}
}
}
}
}
Мы создаем признак CoffeeComponent и CoffeeComponentImpl, которые создают базовые операции CRUD, как показано ниже:
trait CoffeeComponent {
def find(pk: String): Query[Coffees.type, Coffee]
def findall(pk: String): Query[(Coffees.type, Suppliers.type), (Coffee, Supplier)]
def list(page: Int, pageSize: Int, orderBy: Int, filter: String): Query[(Coffees.type, Suppliers.type), (Coffee, Supplier)]
def delete(pk: String): Int
}
class CoffeeComponentImpl extends CoffeeComponent {
def find(pk: String): Query[Coffees.type, Coffee] = {
Coffees.findByPK(pk)
}
def findall(pk: String): Query[(Coffees.type, Suppliers.type), (Coffee, Supplier)] = {
Coffees.findAll(pk)
}
def list(page: Int, pageSize: Int, orderBy: Int, filter: String): Query[(Coffees.type, Suppliers.type), (Coffee, Supplier)] = {
Coffees.list(page, pageSize, orderBy, filter)
}
def delete(pk: String): Int = {
find(pk).delete
}
}
Нам также нужно создать данные инициализации для теста, как показано ниже:
trait InitTrait {
def init = {
val ddl = (Suppliers.ddl ++ Coffees.ddl)
ddl.drop
ddl.create
// Insert some suppliers
Suppliers.insertAll(
Supplier(Some(101), "Acme, Inc.", "99 Market Street", "Groundsville", "CA", "95199"))
.....
Coffees.insertAll(
Coffee(Some("Colombian"), 101, 799, 0, 0))
}
}
Теперь запустите ScalaTest из Eclipse IDE, вы увидите что-то, как показано ниже:
Я надеюсь, что этот блог помог вам. В следующем блоге я покажу, как мы можем издеваться над контроллером и тестировать контроллер.
