Для людей, которые спешат, вот код и шаги .
В продолжении Play 2.x (Scala) это соперник Spring MVC? — Введение , в этом блоге, я покажу, как мы реализуем простую реализацию Контроллера, используя ScalaTest / ScalaMock. Я продолжу свой предыдущий пример реализации DAL в Play 2.x (Scala), Slick, ScalaTest основных операций CRUD в каталоге Coffee.
В нашем предыдущем примере мы уже реализовали черту DAL под названием CoffeeComponent с базовым 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 }
Мы строим инъекцию CoffeeComponent в CoffeeController и создаем объект Singleton с тем же именем, как показано ниже:
class CoffeesController(coffeeComponent: CoffeeComponent) extends Controller { ... def delete(pk: String) = Action { database withSession { println("in db session") Home.flashing(coffeeComponent.delete(pk) match { case 0 => "failure" -> "Entity has Not been deleted" case x => "success" -> s"Entity has been deleted (deleted $x row(s))" }) } } } object CoffeesController extends CoffeesController(new CoffeeComponentImpl)
Как показано выше, у нас есть метод удаления, мы создадим ScalaMock для имитации метода удаления coffeeComponent и управления ожидаемым поведением для возврата 1 выполненной строки и подтверждения статуса HTTP SEE_OTHER, как показано ниже,
class CoffeesControllerTest extends FunSpec with ShouldMatchers with MockFactory { describe("Coffee Controller with Mock test") { it("should delete a coffee record with assert on status") { running(FakeApplication(additionalConfiguration = inMemoryDatabase())) { val mockComponent = mock[CoffeeComponent] (mockComponent.delete _).expects("Columbian") returning (1) twice val controller = new CoffeesController(mockComponent) mockComponent.delete("Columbian") should equal (1) val result = controller.delete("Columbian")(FakeRequest()) status(result) should equal (SEE_OTHER) } } } }
Если вы заметили, мы расширяем FunSpec из ScalaTest для BDD . Также HTTP-статус SEE_OTHER , потому что успех перенаправлен на страницу индекса.
Теперь, если вы запустите ScalaTest, вы увидите результат в STS, как показано ниже,
Я надеюсь, что этот блог помог. В моем следующем блоге я расскажу о тестировании маршрутов контроллера и тестировании внешнего интерфейса.