2011-03-08 13 views
5

हमारे पास एक जार है कि हमने स्रोत कोड खो दिया है। मैंने जार को तोड़ दिया और इससे नया स्रोत बनाया। मैं फिर सत्यापित करना चाहता हूं कि स्रोत कोड और पुराने जार का एक ही व्यवहार है। मैं सत्यापन करने के लिए यूनिट परीक्षण लिख रहा हूं समस्या यह है कि दोनों के पास समान नामस्थान/वर्ग का नाम है, इसलिए मुझे नहीं पता कि पुराने जार और नए स्रोत कोड को कैसे बांटना है। मैं क्या कर सकता हूं या यह असंभव है?जावा: नामस्थान संघर्ष को हल करें

उत्तर

3

आप केवल आप कोड की है कि संस्करण चला रहे हैं कि गारंटी करने के लिए एक ही बार में कक्षा पथ पर एक संस्करण की आवश्यकता है। कोड से अलग अपने यूनिट परीक्षण को विकसित करें ताकि आप किसी भी संस्करण में ड्रॉप कर सकें।

+0

मुझे उम्मीद थी कि मुझे ऐसा करने की ज़रूरत नहीं है, लेकिन यह एकमात्र शौक जैसा लगता है। – Bishnu

1

नए स्रोत को परीक्षण उद्देश्यों के लिए अस्थायी नामस्थान दें।

com.yourfirm.test.packagename.TheClassName 

पुराने लोगों बस TheClassName के रूप में आयात किया जा सकता है और संदर्भित करने के लिए: फिर आयात के बजाय, आप के रूप में अपने नए वर्गों देख सकते हैं। इस तरह आप अपने परीक्षण मामलों को देखकर बता सकते हैं जो कि है।

या बस -cp oldpackage.jar और फिर -cp newpackage.jar के साथ परीक्षण चला।

+0

टेस्ट को बिल्ड कोड को स्वचालित करने की आवश्यकता है, इसलिए यह संभव नहीं है। – Bishnu

0

मैं जो कक्षाओं classpath साथ रनटाइम पर परीक्षण किया जा रहा बदल देंगे। यह दृष्टिकोण यह सुनिश्चित करने के मामले में कम त्रुटि-प्रवण होगा कि आप दोनों द्विआधारी के खिलाफ एक ही परीक्षण कोड चला रहे हैं। अन्यथा आप परीक्षण के सही हैं या नहीं, इसके आसपास आप अधिक जटिलता पेश करते हैं।

0

ऐसा लगता है कि आप एक ही समय में दोनों जार के खिलाफ परीक्षण निष्पादित करने के लिए कोशिश कर रहे हैं। मैं पुराने/नए जारों को अलग करने के तरीके के बारे में नहीं जानता अगर वे दोनों कक्षा में हैं।

stdout/stderr करने के लिए अपने इकाई परीक्षण उत्पादन परिणाम, आप मूल जार के खिलाफ परीक्षण चलाने और परिणाम को बचाने के सकता है। फिर नए जार के खिलाफ परीक्षण चलाएं और परिणामों को एक अलग फ़ाइल में सहेजें। फिर फाइलों को अलग करें।

एक और दृष्टिकोण नए स्रोत कोड refactor करने के लिए किया जाएगा, ताकि यह एक अनूठा नाम स्थान है। फिर आप एक ही समय में दोनों जारों के खिलाफ परीक्षण कर सकते हैं, लेकिन मौजूदा कार्यक्रमों को नए जार का उपयोग करने के लिए यह बहुत काम हो सकता है।

1

यह संभव है, लेकिन आपको कक्षा लोडिंग के साथ गड़बड़ करना है। क्लासपाथ पर किसी भी जार को डालने के बजाय, आपको उन्हें रनटाइम पर लोड करना होगा। लाइब्रेरी के लिए JCL देखें ताकि आप ऐसा कर सकें। (अस्वीकरण: मैंने कभी भी जेसीएल का उपयोग नहीं किया है।)

असल में, प्रत्येक परीक्षा को पुराने जार से कक्षा को लोड करना होगा, जिस विधि का आप परीक्षण कर रहे हैं उसके परिणामों को पकड़ लें, फिर उस जेएआर को उतार दें, नया लोड करें , नए संस्करण के खिलाफ एक ही विधि चलाएं, और परिणामों की तुलना करें।

0

यदि आप चींटी (जुनीट-टास्क) के माध्यम से अपने परीक्षण चलाते हैं, तो आप दोनों रनों के लिए एंट क्लासपाथ को अलग-अलग नियंत्रित कर सकते हैं (एक बार जार के माध्यम से, कक्षाओं के फाइलसेट के माध्यम से)।

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