2012-09-25 11 views
5

मुझे प्ले एप्लिकेशन में मॉकिंग के साथ कोई समस्या है।प्ले में मजाक कर रहे हैं! और स्कैला

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") 
     } 
    } 
} 

मुझे क्या करना चाहते हैं एक अनुरोध का परीक्षण लेकिन EmailChecker दूर नकली है क्योंकि यह कुछ डेटाबेस में कुछ देखने करता है और है कि कुछ मैं अपने परीक्षण में क्या करना चाहते हैं नहीं है: मैं एक आवेदन के रूप में निम्नानुसार है।

मैंने स्कैला में नकली करने के बारे में कुछ ट्यूटोरियल देखे हैं, लेकिन मुझे कुछ भी नहीं मिला जो मेरे पास है।

कोई भी मदद/पॉइंटर्स/ट्यूटोरियल जो दिखाता है कि मैं जो करना चाहता हूं वह बहुत अच्छा होगा।

मैं दोनों के लिए काफी नया हूं! और स्काला ...

उत्तर

5

एक संभव समाधान:

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) 

और परीक्षण होगा:

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]") 
    } 
} 

मैं भी एक वस्तु रियल और टेस्ट implicits कि असली प्रदान युक्त परिभाषित करना चाहते और ईमेलशेकर जैसे सेवाओं के क्रमशः संस्करणों को स्टब करें और यह परीक्षण करें कि यह एक परीक्षण या प्रोड कोड है या नहीं। इस मामले में आपको ईमेल चेकर पैरामीटर को अंतर्निहित करने की आवश्यकता है। निर्भरता इंजेक्शन का एक कच्चा प्रकार।

+0

यह काम किया। धन्यवाद। – Jakob

+0

इसे सुनकर खुशी हुई। क्या आप उत्तर को स्वीकार कर सकते हैं। (निर्बाध बिंदु पीछा :) :) – rjsvaljean

+0

क्या कोई मौका है कि आप अपने परीक्षण उदाहरण के जवाब पर दावा जोड़ सकते हैं? –