2015-12-06 14 views
6

में नकली अंतिम कक्षा नकली अंतिम कक्षाओं का मज़ाक कर सकते हैं? यदि हां, तो कैसे? खोज परिणामों ने यह gist लाया, जो ऐसा प्रतीत होता है, लेकिन मुझे ऐसा करने के कोई उदाहरण नहीं मिल रहे हैं। मुझे फोरम पोस्ट भी मिल गए हैं जो कहते हैं कि अंतिम कक्षाओं का मज़ाक उड़ाया नहीं जा रहा है।स्पॉक

+0

कभी-कभी, ग्रोवी के साथ इसे केवल एक कोशिश देने के लिए सबसे अच्छा है। – cjstehno

+0

@cjstehno मैंने कोशिश की, और एक अपवाद मिला। लेकिन मुझे लगा कि शायद ऐसा करने का एक विशेष तरीका है जिसे मैं नहीं जानता। –

+0

क्या मेरा उत्तर समस्या का समाधान करता है? – Opal

उत्तर

14

इस विनिर्देशन:

@Grab('org.spockframework:spock-core:1.0-groovy-2.4') 
@Grab('cglib:cglib-nodep:3.1') 

import spock.lang.* 

class Test extends Specification { 
    def 'lol'() { 
     given: 
     def s = Mock(String) { 
      size() >> 10 
     } 

     expect: 
     s.size() == 10   
    } 
} 

निम्नलिखित अपवाद के साथ समाप्त होता है:

JUnit 4 Runner, Tests: 1, Failures: 1, Time: 29 Test Failure: 
lol(Test) org.spockframework.mock.CannotCreateMockException: 
Cannot create mock for class java.lang.String because Java mocks cannot mock final classes. 
If the code under test is written in Groovy, use Groovy mock. 

समाधान GroovyMock उपयोग करने के लिए है:

@Grab('org.spockframework:spock-core:1.0-groovy-2.4') 
@Grab('cglib:cglib-nodep:3.1') 

import spock.lang.* 

class Test extends Specification { 
    def 'lol'() { 
     given: 
     def s = GroovyMock(String) { 
      size() >> 10 
     } 

     expect: 
     s.size() == 10   
    } 
} 

कौन सा अच्छी तरह से काम करता है।

+0

कोई विचार क्यों यह String.length() के लिए काम नहीं करता है? –

+0

स्ट्रिंग.लेथेंथ() के साथ अंतर हो सकता है क्योंकि यह जावा स्ट्रिंग क्लास पर परिभाषित किया गया है, न कि ग्रोवी संस्करण? यह [उत्तर] (http://stackoverflow.com/a/12177035/369722) ऐसा सुझाव देता है। –

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