2012-11-02 26 views
7

मैं कई निजी वर्गों के साथ कक्षा का परीक्षण करने का प्रयास कर रहा हूं (हां, मुझे पता है कि इसे आम तौर पर टेस्टेबिलिटी के लिए खराब अभ्यास माना जाता है, लेकिन यह सवाल डिजाइन सिद्धांतों के संबंध में नहीं है)। मेरी कक्षा कुछ इस तरह दिखेगा:क्या PowerMock परीक्षण मामलों के लिए एक आंतरिक कक्षा को तत्काल कर सकता है?

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass"); 
Constructor constructor = Whitebox.getConstructor(clazz, null); 
InnerClassType innerClass = (InnerClassType) constructor.newInstance(null); 

और यह भी:

public class EnclosingClass { 
    . 
    . 
    . 
    private class InnerClass implements InnerClassType { 
    public InnerClass(){ /* do stuff */} 
    public int InnerClassMethod(); 
    } 
} 
  • InnerClassType एक सार्वजनिक इंटरफ़ेस

मैं ऐसा करके powermock साथ कक्षाएं instantiating की कोशिश की है है:

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass"); 
InnerClassType innerClass = (InnerClassType) Whitebox.invokeConstructor(clazz); 

हालांकि, दोनों प्रयासों पर मुझे ConstructorNotFoundException

क्या इन आंतरिक कक्षाओं को तुरंत चालू करना संभव है? यदि हां, तो मैं गलत कहां जा रहा हूं?

उत्तर

6

आप अपने पहले प्रयास के लिए निम्न mods के माध्यम से अपने ConstructorNotFoundExeception पिछले स्थानांतरित करने के लिए सक्षम होना चाहिए:

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass"); 
Constructor constructor = Whitebox.getConstructor(clazz, EnclosingClass.class); 
InnerClassType innerClass = (InnerClassType) constructor.newInstance(new EnclosingClass()); 

के बाद से अपने भीतर के वर्ग स्थिर नहीं है, यह परोक्ष बाहरी कक्षा से एक "इस" संदर्भ की उम्मीद है। इस विधि का उपयोग करना, ऐसा लगता है कि आपको इसके साथ स्पष्ट होना है।

+0

पूरी तरह से काम करता है - यह सुनिश्चित करता है कि मेरे यूनिट परीक्षणों को एक गुच्छा ऊपर साफ कर दें! – JoshC13

+0

यह देखते हुए कि इनर क्लास निजी है, आप इनर क्लास टाइप कैसे प्राप्त कर सकते हैं ?? –