मेरे पास सिंगलटन/फैक्ट्री ऑब्जेक्ट है जो मैं एक जुनीट टेस्ट लिखना चाहता हूं। फैक्टरी विधि क्लासपाथ पर गुण फ़ाइल में क्लासनाम के आधार पर तत्काल कार्यान्वित करने का निर्णय लेती है। यदि कोई गुण फ़ाइल नहीं मिली है, या गुण फ़ाइल में क्लासनाम कुंजी नहीं है, तो कक्षा डिफ़ॉल्ट कार्यान्वयन कक्षा को तुरंत चालू करेगी।विभिन्न जुनीट परीक्षणों के लिए विभिन्न क्लासलोडर्स का उपयोग करना?
चूंकि फ़ैक्टरी विधि में "विफलता" तर्क का परीक्षण करने में सक्षम होने के लिए फैक्ट्री को तत्काल समाप्त करने के बाद सिंगलटन का स्थिर उदाहरण रहता है, इसलिए मुझे प्रत्येक टेस्ट विधि को एक अलग क्लासलोडर में चलाने की आवश्यकता होगी।
क्या ऐसा करने के लिए जुनीट (या किसी अन्य इकाई परीक्षण पैकेज के साथ) कोई तरीका है?
संपादित करें: यहाँ फैक्टरी कोड उपयोग में है में से कुछ है:
private static MyClass myClassImpl = instantiateMyClass();
private static MyClass instantiateMyClass() {
MyClass newMyClass = null;
String className = null;
try {
Properties props = getProperties();
className = props.getProperty(PROPERTY_CLASSNAME_KEY);
if (className == null) {
log.warn("instantiateMyClass: Property [" + PROPERTY_CLASSNAME_KEY
+ "] not found in properties, using default MyClass class [" + DEFAULT_CLASSNAME + "]");
className = DEFAULT_CLASSNAME;
}
Class MyClassClass = Class.forName(className);
Object MyClassObj = MyClassClass.newInstance();
if (MyClassObj instanceof MyClass) {
newMyClass = (MyClass) MyClassObj;
}
}
catch (...) {
...
}
return newMyClass;
}
private static Properties getProperties() throws IOException {
Properties props = new Properties();
InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(PROPERTIES_FILENAME);
if (stream != null) {
props.load(stream);
}
else {
log.error("getProperties: could not load properties file [" + PROPERTIES_FILENAME + "] from classpath, file not found");
}
return props;
}
सिंगलेट्स चोट की पूरी दुनिया का नेतृत्व करते हैं। सिंगलेट्स से बचें और आपका कोड परीक्षण करने के लिए बहुत आसान हो जाता है और बस ऑल-राउंड निकर। –