2012-09-25 28 views
5

Tôi gặp sự cố với chế nhạo trong ứng dụng Play. Tôi có một ứng dụng như sau:Mocking in Play! và Scala

object Application extends Controller { 
    def login = Action {implicit request => 
     val email = ... //Some email from the request 
     if(EmailChecker.checkEmail(email)) { 
      Ok("Email is checked and is fine") 
     } else { 
      Ok("Email is wrong") 
     } 
    } 
} 

Những gì tôi muốn làm là để thử nghiệm một yêu cầu nhưng thử đi EmailChecker bởi vì nó hiện một số tra cứu ở một số cơ sở dữ liệu và đó không phải là điều mà tôi muốn làm trong thử nghiệm của tôi.

Tôi đã thấy một số hướng dẫn về cách giả lập trong Scala nhưng tôi không thể tìm thấy bất kỳ điều gì bao gồm trường hợp tôi có.

Bất kỳ trợ giúp/con trỏ/hướng dẫn nào cho thấy cách làm những gì tôi muốn làm sẽ tuyệt vời.

Tôi khá mới đối với cả Play! và Scala ...

Trả lời

5

Một giải pháp khả thi:

class Application(emailChecker: EmailChecker) extends Controller { 
    def login = Action {implicit request => 
     val email = ... //Some email from the request 
     if(emailChecker.checkEmail(email)) { 
      Ok("Email is checked and is fine") 
     } else { 
      Ok("Email is wrong") 
     } 
    } 
} 

object Application extends Application(EmailChecker) 

Và thử nghiệm sẽ là:

import org.specs2.Specification 
import org.specs2.mock.Mockito 

class ApplicationUnitSpec extends Specification with Mockito { def is = 
    "Test Application" ! { 
     val emailChecker = mock[EmailChecker] 
     val response = new Application(emailChecker).login(FakeRequest) 
     there was one(emailChecker).checkEmail("[email protected]") 
    } 
} 

Tôi cũng muốn xác định một đối tượng chứa implicits Real và thử nghiệm cung cấp thực và các phiên bản sơ khai tương ứng của các dịch vụ như EmailChecker và nhập chúng tùy thuộc vào việc đó là mã kiểm tra hay mã sản phẩm. Trong trường hợp này, bạn cần phải thực hiện tham số emailChecker ngầm định. Một loại tiêm phụ thuộc thô.

+0

Điều này đã hiệu quả. Cảm ơn. – Jakob

+0

Rất vui khi được nghe. Bạn có thể chấp nhận câu trả lời sau đó xin vui lòng. (Chấm điểm không biết xấu hổ :)) – rjsvaljean

+0

Có cơ hội nào bạn có thể thêm xác nhận vào phản hồi cho ví dụ thử nghiệm của bạn không? –