2010-05-17 18 views
6

मेरे पास एक नियंत्रक विधि है जैसे:यूनिट एक नियंत्रक विधि का परीक्षण?

def search = { 
    def query = params.query 

      ... 

    render results as JSON 
} 

मैं यूनिट का परीक्षण कैसे करूं? विशेष रूप से, मैं params.query सेट करने के लिए खोज कैसे कॉल करूं, और विधि render के परिणामों का परीक्षण कैसे करूं? क्या रेंडर विधि का नकल करने का कोई तरीका है, शायद?

उत्तर

5

सबक्लास grails.test.ControllerUnitTestCase। Grails स्वचालित रूप से आपके नियंत्रक को तुरंत चालू कर देगा और रेंडर और रीडायरेक्ट के संस्करणों को नकल कर देगा जो आपको परिणामों का आसानी से परीक्षण करने की अनुमति देता है। परीक्षण सेट अप करने के लिए बस नियंत्रक.परैम्स को परीक्षण इनपुट असाइन करें।

उदाहरण:

class SomethingControllerTests extends grails.test.ControllerUnitTestCase { 
    void testSearch() { 
     controller.params.query = "test query" 
     controller.search() 
     assertEquals "expected result", controller.response.contentAsString 
    } 
} 

नोट::

class SomethingController { 
    def search = { 
     def query = params.query 
     ...stuff... 
     render results as JSON 
    } 
} 

परीक्षण की तरह दिखता है आप भी एकीकरण परीक्षण के लिए ControllerUnitTestCase उपयोग कर सकते हैं, यदि आप एक पूर्ण एकीकरण वातावरण डेटाबेस के साथ पूरा की जरूरत है।

0

नियंत्रक परीक्षण इकाई के दो तरीके हैं, लेकिन इसके लिए आपको कुछ बदलावों की आवश्यकता होगी।

पहला है कि इकाई पार्सिंग की जटिलता को जोड़ने के बिना स्वयं नियंत्रक का परीक्षण करें, ताकि आप अपने यूनिट टेस्ट को लिख सकें और अपने यूनिट टेस्ट के हिस्से के रूप में params.query में पास कर सकें, इसलिए, अपने खोज फ़ंक्शन को विभाजित करें दो कार्य:

def search = { 
    def query = params.query 
    render realSearch(query) as JSON 
} 

def realSearch ... 

तो, पहला भाग realSearch का परीक्षण करता है।

फिर दूसरा भाग एक ऐसा एप्लिकेशन लिखना है जो वास्तव में आपके वेब एप्लिकेशन से कनेक्ट होगा, और एक कार्यात्मक परीक्षण करेगा, जो आपके पूरे एप्लिकेशन का परीक्षण करेगा, जिसमें नियंत्रक के उन हिस्सों को शामिल किया जाएगा जिन्हें पहले भाग में परीक्षण नहीं किया गया था ।

0

TFM: Grails ref chapter 9

का पालन करें testCreateWithJSON() उदाहरण ... बस पैरामीटर में अपनी क्वेरी स्ट्रिंग सामान [ 'जिज्ञासा'], सेट contentType, कॉल खोज()। चूंकि आप स्पष्ट रूप से रेंडरिंग कॉल कर रहे हैं, सबसे महत्वपूर्ण बात प्रतिक्रिया.contentAsString को देखना होगा ... मैं शायद सामग्री के बारे में पैटर्न-मिलान आवेषण करूँगा ASString; आप इसे जेएसओएन के रूप में दोबारा पार्स कर सकते हैं और उसके बाद ऑब्जेक्ट्स के पेड़ की जांच कर सकते हैं, लेकिन मुझे संदेह है कि यह सरल पैटर्न-मैच के दावे के रूप में स्पष्ट/त्वरित नहीं होगा। आपके यूनिट परीक्षणों के लिए

संबंधित मुद्दे