2012-05-26 9 views
7

मैं वर्तमान में जेएमॉक से जुड़े कुछ परीक्षण लिख रहा हूं। मैं कोड की निम्न संरचना को समझ सकता हूँ नहीं:जेएमॉक - अपेक्षाओं को जोड़ने के लिए अजीब वाक्यविन्यास

context.checking(new Expectations() { //context is of type Mockery of course 
      { 
       allowing(csv).getFileName(); 
       will(returnValue(fileName)); 
      } 
     }); 

धीरे विश्लेषण कर रहा है, जहाँ तक मुझे पता है,

context.checking(new Expectations() { ... } 

यह Expectations के anonoymous instantiateion उत्पन्न होगा। लेकिन इसके बाद हमारे पास एक और ब्रैकेट क्यों हैं, और फिर कुछ अजीब, स्थिर मुझे विश्वास है, जैसे अनुमति() आदि? अगर कोई मुझे जावा बिंदु से मुझे समझा सकता है कि यहां क्या हो रहा है, तो मैं बहुत आभारी रहूंगा।

उत्तर

6

ब्रेसिज़ का दूसरा सेट instance initialization block बनाता है, और इसका कोड कक्षा के प्रत्येक निर्माता में कंपाइलर द्वारा प्रतिलिपि बनाई जाती है। यह आपको इंस्टेंस सदस्यों तक पहुंच प्रदान करता है। जेमॉक के एपीआई के मामले में, यह उम्मीदों को शुरू करने के लिए एक छोटा रास्ता प्रदान करता है। आप समकक्ष चीज प्राप्त कर सकते हैं (यद्यपि Expectations संकलित करते समय चेतावनी के साथ एक कन्स्ट्रक्टर से ओवरराइड करने योग्य विधि के लिए असुरक्षित कॉल के बारे में)।

public abstract class Expectations { 
    public Expectations() { 
     buildExpectations(); 
    } 

    protected abstract void buildExpectations(); 

    ... 
} 

और अपने परीक्षण

context.checking(new Expectations() { 
    protected void buildExpectations() { 
     allowing(csv).getFileName(); 
     will(returnValue(fileName)); 
    } 
}); 

में मैं निश्चित रूप से छोटा संस्करण पसंद करते हैं। :)

1

कुछ लोगों का मानना ​​है कि उम्मीदों निर्दिष्ट करने के लिए स्थिर तरीकों शांत की तलाश में, संक्षिप्त प्रदान करता है, धाराप्रवाह और आसानी से पढ़ने योग्य वाक्य रचना के साथ स्थिर initialisers में उम्मीदों का निर्माण, - और मैं उन लोगों के साथ सहमत हैं। अजीब वाक्यविन्यास न केवल ढांचे के मॉकिंग में अच्छी चीज है - हुड के नीचे बहुत अच्छा बाइटकोड हेरफेर है।

+1

वास्तव में मेरे प्रश्न का उत्तर नहीं दे रहा है मुझे डर है – Bober02

6

इंस्टेंस प्रारंभकर्ता दिलचस्प हैं। वे केवल जगह रखते हैं कि मैंने वास्तव में उन्हें जेएमॉक के साथ बहुत कुछ देखा है। एक सरल और समझने योग्य संदर्भ पर विचार करें। आप एक नक्शा बना सकते हैं और इसमें आइटम जोड़ सकते हैं:

Map<String,String> map = new HashMap<String,String>(){ 
    { 
     put("One","Something"); 
     put("Two","Other"); 
    } 
}; 

शायद यह आपको यह देखने में मदद करेगा कि जेएमॉक क्या कर रहा है।

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