{"id":4749,"date":"2014-03-30T15:05:44","date_gmt":"2014-03-30T15:05:44","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2014\/03\/30\/mock-objects-in-play2-0-collection-of-common-programming-errors\/"},"modified":"2014-03-30T15:05:44","modified_gmt":"2014-03-30T15:05:44","slug":"mock-objects-in-play2-0-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2014\/03\/30\/mock-objects-in-play2-0-collection-of-common-programming-errors\/","title":{"rendered":"Mock Objects in Play[2.0]-Collection of common programming errors"},"content":{"rendered":"<p>There is a third way; create your controller as a class or a trait for testing. Here is a simple example.<\/p>\n<p>Your trait + implementation:<\/p>\n<pre><code>package services\n\ntrait MyService {\n  def getUser(id:String):User\n}\n\nclass ConcreteService extends MyService {\n  override def getUser(id:String):User = {\n  \/\/Do real stuff\n  }\n}\n<\/code><\/pre>\n<p>In your controller class:<\/p>\n<pre><code>package controllers\n\nimport services._\n\nclass Users(service: MyService) extends Controller {\n  def show(id: String) = Action {\n    val user = service.getUser(id)\n    Ok(views.html.user(user))\n  }\n}\n\nobject Users extends controllers.Users(new ConcreteService()) {}\n<\/code><\/pre>\n<p>Now you can run some unit tests..<\/p>\n<pre><code>package test\n\nimport controllers.Users\nimport play.api.test._\nimport play.api.test.Helpers._\n\nimport org.specs2.mock.Mockito\nimport org.specs2.mutable.Specification\n\nclass UsersSpec extends Specification with Mockito {\n  val service = mock[MyService]\n\n  \"Users controller\" should {\n    \"list users\" in {\n      \/\/Insert mocking stuff here\n\n      val users = new Users(service)\n      val result = users.show(\"somerandomid\")(FakeRequest())\n      status(result) must equalTo(OK)\n    }\n  }\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>There is a third way; create your controller as a class or a trait for testing. Here is a simple example. Your trait + implementation: package services trait MyService { def getUser(id:String):User } class ConcreteService extends MyService { override def getUser(id:String):User = { \/\/Do real stuff } } In your controller class: package controllers import [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4749","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/4749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=4749"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/4749\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=4749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=4749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=4749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}