2012-12-12 15 views
9

मैं एक सेवा के लिए यूनिट परीक्षण लिखने की कोशिश कर रहा हूं जो कुछ सेटिंग्स करने के लिए grailsApplication.config का उपयोग करता है। ऐसा लगता है कि मेरे यूनिट परीक्षणों में सेवा उदाहरण कॉन्फ़िगरेशन फ़ाइल (शून्य सूचक) तक इसकी सेटिंग के लिए नहीं पहुंच सका, जबकि जब मैं "रन-एप" चलाता हूं तो उस सेटिंग तक पहुंच सकता है। मैं अपने यूनिट परीक्षणों में grails आवेदन सेवा का उपयोग करने के लिए सेवा को कैसे कॉन्फ़िगर कर सकता हूं।grails Grails इकाई परीक्षण में आवेदन पहुंच

class MapCloudMediaServerControllerTests { 

    def grailsApplication 

    @Before 
    public void setUp(){ 
     grailsApplication.config= 
     ''' 
    video{ 
    location="C:\\tmp\\" // or shared filesystem drive for a cluster 

    yamdi{ 
     path="C:\\FFmpeg\\ffmpeg-20121125-git-26c531c-win64-static\\bin\\yamdi" 
     } 

    ffmpeg { 
     fileExtension = "flv" // use flv or mp4 
     conversionArgs = "-b 600k -r 24 -ar 22050 -ab 96k" 
     path="C:\\FFmpeg\\ffmpeg-20121125-git-26c531c-win64-static\\bin\\ffmpeg" 
     makethumb = "-an -ss 00:00:03 -an -r 2 -vframes 1 -y -f mjpeg" 
    } 

    ffprobe { 
     path="C:\\FFmpeg\\ffmpeg-20121125-git-26c531c-win64-static\\bin\\ffprobe" 
     params="" 
    } 

    flowplayer { 
     version = "3.1.2" 
    } 

    swfobject { 
     version = "" 

    qtfaststart { 
     path= "C:\\FFmpeg\\ffmpeg-20121125-git-26c531c-win64-static\\bin\\qtfaststart" 
    } 
} ''' 
    } 

@Test 
    void testMpegtoFlvConvertor() { 

     log.info "In test Mpg to Flv Convertor function!" 

     def controller=new MapCloudMediaServerController() 
     assert controller!=null 

     controller.videoService=new VideoService() 
     assert controller.videoService!=null 

     log.info "Is the video service null? ${controller.videoService==null}" 

     controller.videoService.grailsApplication=grailsApplication 

     log.info "Is grailsApplication null? ${controller.videoService.grailsApplication==null}" 

     //Very important part for simulating the HTTP request 
     controller.metaClass.request = new MockMultipartHttpServletRequest() 
     controller.request.contentType="video/mpg" 
     controller.request.content= new File("..\\MapCloudMediaServer\\web-app\\videoclips\\sample3.mpg").getBytes() 

     controller.mpegtoFlvConvertor() 

     byte[] videoOut=IOUtils.toByteArray(controller.response.getOutputStream()) 
     def outputFile=new File("..\\MapCloudMediaServer\\web-app\\videoclips\\testsample3.flv") 
     outputFile.append(videoOut) 
    } 
} 
+0

आप TestFor या इस परीक्षण में किसी भी टिप्पणी है? Grails redeclare आवेदन नहीं है, नकली एनोटेशन के साथ आता है। 'GrailsUnitTestMixin' देखें। –

+0

हाँ यह @TestFor एनोटेशन है। मैंने "डीफ grails आवेदन" हटा दिया लेकिन grails आवेदन संदेश पर संदेश शून्य मिला। बीटीडब्ल्यू मैं Grail 2.1 का उपयोग कर रहा हूँ। – Reza

+0

क्या आप स्टैकट्रैक पोस्ट कर सकते हैं? साथ ही, मुझे यकीन नहीं है कि आप इस तरह कॉन्फ़िगरेशन घोषित कर सकते हैं, क्योंकि यह ConfigObject का एक उदाहरण है। मैं एक परीक्षण करूँगा और देख सकता हूं कि आपको ConfigSlurper का उपयोग करने की आवश्यकता होगी या नहीं। –

उत्तर

19

आप @TestFor Grails (2.0) आप के लिए पहले से ही नकली grailsApplication का उपयोग करते हैं, बस अपने कॉन्फ़िगरेशन सेट है, लेकिन grailsApplication नहीं घोषित करते हैं। ऐसा करने से मजाकिया उदाहरण ओवरराइड हो जाता है।

@TestFor(MyService) 
class MyServiceTests { 

    @Before 
    public void setUp() { 
    grailsApplication.config.something = "something" 
    } 

    @Test 
    void testSomething() { 
    MyService service = new MyService() 
    service.grailsApplication = grailsApplication 
    service.doSomething() 
    } 


} 

संपादित:

आप विन्यास के लिए आप इस पार्स चाहिए जोड़ने के लिए एक String की घोषणा की,। here एक उदाहरण देखें।

मूल रूप से आप का उपयोग ConfigObject प्राप्त करने के लिए करते हैं, और कॉन्फ़िगरेशन में सामग्री जोड़ने के लिए grails.config.merge() का उपयोग करते हैं।

+0

मैंने सेवा इकाई परीक्षण पहले किया था और यह काम कर रहा है। अब मैंने उस सेवा को नियंत्रक में इस्तेमाल किया था। मैं उस सेवा का उपयोग करने वाले नियंत्रक का परीक्षण करना चाहता हूं। ऐसा लगता है कि मैं नियंत्रक कार्यक्षमता का परीक्षण करने के लिए grails आवेदन (सेवा के लिए) सेट नहीं कर सका। कोई सुझाव? – Reza

+0

बस इस उदाहरण की तरह सेवा बनाएं और सीधे अपने नियंत्रक के उदाहरण में सेट करें। –

+0

मैंने वैसे ही किया जैसा आपने उल्लेख किया था लेकिन संदेश को "ऑब्जेक्ट सेट नहीं कर सकता" कॉन्फ़िगर करें 'शून्य ऑब्जेक्ट पर "। – Reza

4

DefaultGrailsApplication का उपयोग कर grailsApp का निर्माण कार्य करेगा।

class ZazzercodeUnitTestCase extends GrailsUnitTestCase { 
    def grailsApplication = new org.codehaus.groovy.grails.commons.DefaultGrailsApplication() 
    def chortIndex= grailsApplication.config.zazzercode.chortIndex 
} 
0

जाओ http://ilikeorangutans.github.io/2014/02/06/grails-2-testing-guide को

Grails 'config आमतौर पर config संपत्ति का उपयोग कर GrailsApplication का एक इंजेक्शन उदाहरण के माध्यम से पहुँचा जा सकता है। Grails GrailsApplication इकाई परीक्षण में इंजेक्शन है, तो आप इसे सीधे पहुंच सकते हैं:

@TestMixin(GrailsUnitTestMixin) 
class MySpec extends Specification {   
    private static final String VALUE = "Hello" 
    void "test something with config"() { 
     setup: 
     // You have access to grailsApplication.config so you can 
     //modify these values as much as you need, so you can do 
     grailsApplication.config.myConfigValue = VALUE 

     assert:    
     grailsApplication.config.myConfigValue == VALUE 
    } 

}