9

में जुनीट आर्ट एपीआई का उपयोग करना ठीक है, मैं अपने विधि तर्कों के लिए शून्य जांच करना चाहता हूं, जैसे पैरामीटर शून्य नहीं होना चाहिए। क्या मेरे जावा कोड में assertNotNull("Map should not be null", filePaths); जैसे कुछ का उपयोग करना ठीक है? मैंक्या जावा उत्पादन कोड

if(filePaths == null){ 
    throw new IllegalArgumentException("Maps cannot be null"); 
} 

सिर्फ उन सभी अशक्त जाँच से मेरे कोड को साफ रखने के बचने की कोशिश कर रहा हूँ। मुझे पता है कि मैं अपनी खुद की Validator कक्षा लिख ​​सकता हूं और notNull विधियों को अधिभारित कर चुका हूं लेकिन व्हील का पुन: आविष्कार करने के लिए उपयोग करने के लिए कुछ मौजूदा और सरल नहीं है।

केवल दोष यह है मैं JUnitAssert का उपयोग कर के देखते हैं कि यह फेंकता AssertionError और नहीं IllegalArgumentException और बहुत आगे है।

+3

क्यों गुवा की ['पूर्व शर्त '] (http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/base/Preconditions.html) का उपयोग क्यों नहीं करें? –

+0

एक और विकल्प जावा भाषा द्वारा प्रदान किए गए जोरदार कीवर्ड का उपयोग करना है - उदाहरण के लिए, null! = Filepaths पर जोर दें: "मानचित्र शून्य नहीं हो सकते हैं"। इन चेक को स्टार्टअप पर चालू या बंद किया जा सकता है। –

+1

@AndyThomas: सार्वजनिक विधियों में तर्क जांच के लिए दावों का उपयोग न करें। [दस्तावेज़ीकरण] से [http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html)। यदि दावे अक्षम हैं, तो इसे कभी भी –

उत्तर

6

नहीं, इसका उपयोग करना ठीक नहीं है। जुनीट जोर देने के तरीके AssertionError फेंक देते हैं। उत्पादन कोड में Error फेंकना अच्छा नहीं है। जावाडोक से:

कोई त्रुटि है कि गंभीर समस्याओं को इंगित करता है फेंकने योग्य का एक उपवर्ग है कि एक उचित आवेदन को पकड़ने की कोशिश नहीं करनी चाहिए। ऐसी अधिकांश त्रुटियां असामान्य स्थितियां हैं। थ्रेडडिथ त्रुटि, हालांकि "सामान्य" स्थिति, त्रुटि का उप-वर्ग भी है क्योंकि अधिकांश अनुप्रयोगों को इसे पकड़ने की कोशिश नहीं करनी चाहिए। पर एक विधि की आवश्यकता नहीं है, जो कि फेंकने में घोषित करता है, त्रुटि के किसी भी उप-वर्ग को विधि के निष्पादन के दौरान फेंक दिया गया है लेकिन पकड़ा नहीं गया है, क्योंकि इन त्रुटियां असामान्य स्थितियां हैं जो कभी नहीं होनी चाहिए। यही है, त्रुटि और इसके उप-वर्गों को अपवादों की संकलन-समय जांच के उद्देश्यों के लिए अनचेक अपवाद के रूप में माना जाता है।

+0

भले ही मैं अपना खुद का सत्यापन लिखूं, फिर भी मैं उत्पादन कोड में अवैध अर्ग्यूमेंट अपवाद को फेंक दूंगा। ओह, आपका मतलब था 'अपवाद' फेंकना और 'त्रुटि' –

+0

सही नहीं, मेरा मतलब था कि अपवाद के विपरीत त्रुटि नहीं डाली गई। –

12

आप जावा 7+ उपयोग करते हैं, आप का उपयोग कर सकते हैं:

Objects.requireNonNull(filePaths, "Map should not be null"); 

इसके अलावा एक शून्य तर्क के साथ, मैं एक NullPointerException या एक IllegalArgumentException, लेकिन नहीं एक AssertionError उम्मीद करेंगे।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। हम अभी भी जावा 6 पर हैं लेकिन यह जानना अच्छा है कि जावा में निर्मित 7 –

+0

@ जावा 6 के साथ लर्नर आप पहले से ही इंगित किए गए गुवा प्रीकंडिशन का उपयोग कर सकते हैं (यह लगभग ऑब्जेक्ट्स.क्वायर नॉननुल जैसा ही है)। – assylias

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