2012-02-07 17 views
5

मुझे जावा assert कीवर्ड पसंद नहीं है, क्योंकि यह हमेशा उत्पादन कोड में सक्षम नहीं है। मैं उपयोग करने के लिए एक अच्छी "प्रोडक्शनएस्र्ट" कक्षा की तलाश में हूं, जो हमेशा उल्लेखनीय दावों को चलाता है।उत्पादन के उपयोग के लिए एक अच्छा जोर वर्ग? जावा के ग्रोवी के पावरएएसएसर्ट के बराबर?

एक उम्मीदवार Guava's Preconditions है। यह सभ्य है, लेकिन थोड़ा सीमित (उदा। assertEquals(), assertNull(), assertGreaterEquals())।

एक विकल्प में जुनीट या एक अन्य परीक्षण ढांचा शामिल है ... लेकिन मैं केवल एक साधारण जोर वर्ग के लिए एक संपूर्ण परीक्षण ढांचे पर निर्भर होने के लिए अनिच्छुक हूं।

यदि मैं ग्रोवी में प्रोग्रामिंग कर रहा था, तो मैं PowerAssert का उपयोग करूंगा।

क्या जावा के लिए एक अच्छा "ProductionAssert" कक्षा है?

पीएस - एक विकल्प अंततः Java Contracts जैसा कुछ जांचना है ... लेकिन जो मैं अभी देख रहा हूं वह पूर्ण न्यूनतम, शून्य घर्षण, बस निर्माण प्रक्रिया में किसी भी बदलाव के बिना ड्रॉप-इन-इन ... मुझे यकीन नहीं है कि अनुबंध उस विवरण को फिट बैठता है।

public void thing(String foo){ 
    Assert.hasText(foo, "'foo' is required"); 
} 

जाहिर है अपने वसंत का उपयोग नहीं तो यह करने के लिए नहीं जा रहा है, तो:

+0

यह स्क्रैच से एक PowerAssert वर्ग लिखने के लायक नहीं है? – vulkanino

+0

@ vulkanino - मैंने बस ऐसा करना शुरू कर दिया ... लेकिन मैं आमतौर पर पुन: कार्यान्वित करने के बजाय पुन: उपयोग करना पसंद करता हूं, जब तक कि कोई अच्छा कारण न हो। – ripper234

+0

मुझे भी हाँ, लेकिन आपने "पूर्ण न्यूनतम, शून्य घर्षण" लिखा है ... – vulkanino

उत्तर

1

वसंत वसंत कोर मॉड्यूल में एक, Assert


2

मैं वसंत के Assert वर्ग का उपयोग करते हैं है अपनी नाव तैरें और मुझे यकीन नहीं है कि यह अमरूद की तुलना में काफी बेहतर है।

3

मैं जूनिट का उपयोग करूंगा। यह इन परीक्षणों का उपयोग करने के लिए डिज़ाइन किया गया है।

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

boolean assertOn = false; 
assert assertOn = true; 
if (!assertOn) 
    throw new AssertionError("Assertions must be turned on"); 

एक तीसरा विकल्प इन विधियों को स्वयं लिखना है। आमतौर पर कोड की केवल दो पंक्तियां होती हैं। इस तरह वे जो कुछ भी आप चाहते हैं वह करेंगे।

+0

मैंने इस कार्यक्रम को असफल होने के बारे में सोचा नहीं है अगर आवेषण चालू नहीं हैं - रोचक मोड़। अभी के लिए मैं विकल्प 3 का उपयोग कर रहा हूं, और कुछ और उत्तरों/वोटों की प्रतीक्षा कर रहा हूं। – ripper234

+1

यह पता लगाने के लिए कोड जोड़ा गया है कि क्या दावा चल रहे हैं। –

0

आप वैध 4j का उपयोग हैमक्रिस्ट-मैचर्स (मेवेन सेंट्रल पर org.valid4j: valid4j के रूप में) के साथ कर सकते हैं। डिफ़ॉल्ट प्रदाता AssertionError फेंकता है, लेकिन यदि आवश्यक हो तो आप अपनी खुद की अनुकूलित वैश्विक नीति पंजीकृत कर सकते हैं।

पूर्व शर्त के लिए (कथनों की तरह वास्तव में):

import static org.valid4j.Assertive.*; 

require(x, greaterThan(0)); // throws RequireViolation extends AssertionError 

का उपयोग कर 'सुनिश्चित' postconditions के लिए इसी तरह समर्थन करते हैं।

एक साइड-नोट पर: आप नियमित इनपुट सत्यापन के लिए भी उसी लाइब्रेरी का उपयोग कर सकते हैं (यानी।वसूली योग्य अपवाद फेंक):

import static org.valid4j.Validation.*; 

validate(argument, isValid(), otherwiseThrowing(InvalidException.class)); 

लिंक:

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