Для людей, которые спешат, вот код и шаги .
В продолжении 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, вы увидите что-то, как показано ниже:
Я надеюсь, что этот блог помог вам. В следующем блоге я покажу, как мы можем издеваться над контроллером и тестировать контроллер.