मान लीजिए मैं एक विरासत JUnit टेस्ट स्वीट निम्नलिखित परीक्षण भी शामिल है:सुलझाने जावा classpath नरक
public class AwesomeTest {
public void testBusinessLogic() {
...
[awesome mocking library]
...
}
}
public class AmazingTest {
public void testBusinessProcess() {
...
[amazing xml operation]
...
}
}
अब लगता है कि बहुत बढ़िया मजाक पुस्तकालय बहुत बढ़िया BCEL बाईटकोड पीढ़ी पुस्तकालय पर निर्भर करता है कि किस वर्ग में शामिल है org.useful.XMLClass
और इस लाइब्रेरी में XMLClass का संस्करण 1 है।
अब मान लें कि अमेज़िंग एक्सएमएल ऑपरेशन अमेज़िंग एक्सएमएल लाइब्रेरी पर निर्भर करता है जिसमें कक्षा org.useful.XMLClass
है और इस पुस्तकालय में एक्सएमएल क्लास का संस्करण 2 है।
यह भी मान लें कि कक्षा का संस्करण 2 संस्करण 1 के साथ संगत नहीं है - इसलिए क्लासपाथ में संस्करण की उच्च प्राथमिकता है - यह दूसरे संस्करण की निर्भरताओं को तोड़ देती है।
यह भी मान लें कि 400 परीक्षण हैं जो भयानक मॉकिंग लाइब्रेरी पर भरोसा करते हैं - इसलिए पुनर्लेखन एक वांछनीय विकल्प नहीं है।
यह भी मान लें कि कुछ महत्वपूर्ण व्यावसायिक सुविधाएं अद्भुत xml libary के साथ बनाई गई हैं - और इसे दृढ़ता से प्राथमिकता दी जाती है कि इसे फिर से लिखना न पड़े।
आप इस क्लासपाथ नरक स्थिति को कैसे हल करते हैं - एंटी टेस्ट चलाने के अलावा (मान लीजिए कि आप उन्हें एंट के साथ चला रहे हैं) दो अलग-अलग मैन्युअल रूप से ऑर्डर किए गए क्लासपाथ और मैन्युअल रूप से निर्धारित परीक्षण उप-सेट के साथ दो बार? (मैं कस्टम क्लासलोडर्स के साथ एक विचार के लिए खुला हूं - लेकिन यह एंटी सॉल्यूशन के साथ दोहरी कस्टम क्लासपाथ के समान रखरखाव के समान स्तर के बारे में लगता है)
हाँ, यह नरक ठीक है। गलती बाइट कोड जनरेटर के साथ प्रतीत होती है जो एक्सएमएल फ़ाइल को पहली जगह बंडल करती है। मैं आपकी मॉकिंग लाइब्रेरी को अपडेट करने की सलाह दूंगा। – Perception
हो सकता है कि आप "बहुत बढ़िया बीसीईएल बाइटकोड जनरेशन लाइब्रेरी" का स्रोत कोड प्राप्त कर सकें और एक कांटा बना सकें जो कक्षा org.useful.XMLClass के नामित संस्करण पर भरोसा करता है। – gontard
मैं मानता हूं कि कोई आसान जवाब नहीं है। आप शायद कस्टम क्लास लोडर का उपयोग करने का प्रयास कर सकते हैं ... लेकिन यह सिर्फ इसके लायक होने से अधिक प्रयास प्रतीत होता है। मैं एक्सएमएल या मॉकिंग ऑपरेशंस के लिए एक नई लाइब्रेरी का उपयोग करके परीक्षणों को फिर से लिखूंगा। – RudolphEst