2008-09-20 4 views
7

में इंटरफ़ेस को लागू करने वाले सभी वर्गों का परीक्षण करना क्या वहां कुछ भी है (विशेष रूप से जावा के लिए) जो आपको स्वचालित रूप से इंटरफ़ेस के व्यवहार की जांच करने की अनुमति देता है? उदाहरण के तौर पर, मान लें कि मेरे पास तुलनात्मक इंटरफ़ेस के लिए परीक्षण का एक गुच्छा है, जो तुलनात्मक लागू करने वाली किसी भी चीज़ पर लागू होना चाहिए। मैं जो चाहता हूं वह तुलनात्मक रूप से लागू होने वाली किसी भी कक्षा के लिए परीक्षण फिक्स्चर में स्वचालित रूप से "तुलनात्मक परीक्षण" को शामिल करने में सक्षम होना है। बोनस अंक यदि यह जेनेरिक इंटरफेस के साथ काम करेगा।जावा

मुझे पता है कि .NET Framework mbUnit में कुछ समान है, और जब आप टेस्टएनजी के जेनरेटर फ़ंक्शंस जैसे कुछ उपयोग कर रहे हैं तो आप तुलनात्मक के लिए एक परीक्षण स्थिरता स्थापित कर सकते हैं और जेनरेटर आपके प्रत्येक वर्ग का उदाहरण बना सकता है जो तुलनात्मक रूप से लागू करता है । लेकिन मैं इसे स्वचालित होना चाहता हूं, और मेरी प्रत्येक कक्षा के लिए परीक्षण स्थिरता पर स्थित है (क्योंकि मैं पहले से ही उस वर्ग के अन्य हिस्सों के परीक्षण के लिए उन्हें पास कर दूंगा)।

स्पष्टीकरण: मैं निश्चित रूप से ऐसा कुछ बना सकता हूं। मैं पूछ रहा था कि वहां कुछ भी था जो पहले से ही सक्षम है।

उत्तर

0

.NET में एक ऐसी विधि स्थापित करना बहुत आसान होगा जो एक असेंबली को देखता है और प्रत्येक वर्ग की विरासत/कार्यान्वयन पदानुक्रम की पहचान करता है। मुझे यकीन है कि आप इसे जावा में भी कर सकते हैं, अगर आप Java reflection API पर शोध करते हैं।

फिर आप ITargetInterface एस की एक सरणी बना सकते हैं और प्रत्येक पर एक परीक्षण विधि कॉल कर सकते हैं।

0

एक तरीका सभी क्लास फ़ाइलों (या कक्षा निर्देशिका के माध्यम से खोज) के लिए जार फ़ाइल के माध्यम से खोजना होगा, कक्षा फ़ाइल लोड करने के लिए Class.forName() विधि का उपयोग करें और MyInterface.class.isAssignableFrom (मेरी कक्षा)।

यह आसानी से सार्वजनिक आंतरिक स्थैतिक वर्गों (आप कक्षा फ़ाइल नाम को पार्स कर सकते हैं) से निपट नहीं पाएंगे, लेकिन निजी आंतरिक कक्षाओं या अज्ञात आंतरिक कक्षाओं के साथ कभी काम नहीं करेंगे।

+0

प्रयास करें यह बहुत मुश्किल साबित हो सकता है क्योंकि जटिल कारखानों इंटरफ़ेस के विशिष्ट कार्यान्वयन का दृष्टांत के लिए इस्तेमाल किया जा सकता है। – p3t0r

1

अपने अंतिम पैराग्राफ के आधार पर, आप जो कुछ करने का प्रयास कर रहे हैं, वह इकाई परीक्षण में कुछ 'अतिरिक्त विधियों' को इंजेक्ट कर रहा है क्योंकि आप पहले से ही एक विशिष्ट वर्ग का परीक्षण कर रहे हैं। मुझे एक परीक्षण दोहन के बारे में पता नहीं है जो आपको कक्षा के पदानुक्रम के आधार पर परीक्षण संलग्न करने की अनुमति देता है।

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

फिर भी, सामान्य मामले के बारे में, मुझे लगता है कि आप भाग्य से बाहर हैं, क्योंकि जावा टाइप सिस्टम एक तरफा है, आप केवल (आसानी से) यह पता लगा सकते हैं कि क्लास लागू करने वाले इंटरफेस क्या हैं, दूसरी तरफ नहीं। इसके अलावा, समस्या यह है कि 'कहां देखना बंद करें': यदि आपके पास एक परीक्षण है जो आपके सभी comparable कार्यान्वयनकर्ताओं की जांच करता है, तो क्या आप चाहते हैं कि यह String की वैधता की जांच करे, क्योंकि यह आपके जावा वातावरण में है?