आज मैंने JUnit परीक्षण के बजाय JUnit अभिकथन के साथ एक JUnit परीक्षण का मामला देखा — क्या एक से दूसरे को पसंद करने के लिए महत्वपूर्ण फायदे या नुकसान हैं?
जवाबों:
JUnit4 में एक JUnit मुखर द्वारा फेंका गया अपवाद (वास्तव में त्रुटि) जावा assert
कीवर्ड (AssertionError) द्वारा फेंकी गई त्रुटि के समान है , इसलिए यह बिल्कुल वैसा ही है जैसा assertTrue
और स्टैक के अलावा आप अंतर नहीं बता सकते।
कहा जा रहा है कि, जेवीएम में एक विशेष ध्वज के साथ चलने के लिए जोर दिया जाता है, जिससे कई परीक्षण सिर्फ पास हो जाते हैं क्योंकि कोई व्यक्ति उस ध्वज के साथ सिस्टम को कॉन्फ़िगर करना भूल जाता है जब JUnit परीक्षण चलाए गए थे - अच्छा नहीं।
सामान्य तौर पर, इस वजह से, मैं तर्क दूंगा कि JUnit assertTrue
का उपयोग करना बेहतर अभ्यास है, क्योंकि यह गारंटी देता है कि परीक्षण चलाया जाता है, स्थिरता सुनिश्चित करता है (आप कभी-कभी उपयोग करते हैं assertThat
या अन्य एसेर्ट्स जो जावा कीवर्ड नहीं हैं) और यदि JUnit का व्यवहार जोर देता है भविष्य में बदलना चाहिए (जैसे किसी प्रकार के फ़िल्टर या अन्य भविष्य के JUnit फीचर में हुक करना) आपके कोड का लाभ उठाने में सक्षम होंगे।
जावा में मुखर कीवर्ड का वास्तविक उद्देश्य रनटाइम पेनल्टी के बिना इसे बंद करने में सक्षम होना है। यह इकाई परीक्षणों पर लागू नहीं होता है।
मैं JUnit के दावे को पसंद करता हूं क्योंकि वे बिल्ट-इन assert
स्टेटमेंट की तुलना में अधिक समृद्ध एपीआई की पेशकश करते हैं और इससे भी महत्वपूर्ण बात यह है कि इसके विपरीत स्पष्ट रूप से सक्षम होने की आवश्यकता नहीं है assert
, जिसके लिए -ea
जेवीएम तर्क की आवश्यकता होती है।
-ea
हमेशा इसके लिए सक्षम है mvn test
, इसकी कोई आवश्यकता नहीं है -ea
। अमीर आपी, अच्छी पकड़। कभी-कभी मुझे लगता है कि एपीआई का परीक्षण में दुरुपयोग किया जाता है क्योंकि यह एप्लिकेशन का हिस्सा नहीं है (एपी में), मैं इसे सिर्फ समृद्ध तरीके से कॉल करना पसंद करता हूं।
जब एक परीक्षण विफल हो जाता है तो आप अधिक जानकारी प्राप्त कर सकते हैं।
assertEquals(1, 2);
का परिणाम java.lang.AssertionError: expected:<1> but was:<2>
बनाम
assert(1 == 2);
का परिणाम java.lang.AssertionError
यदि आप संदेश तर्क जोड़ते हैं तो आप और भी अधिक जानकारी प्राप्त कर सकते हैं assertEquals
assert 1==2: "1 is not 2";
।
assert
हो सकता है जहां जावा बेहतर हो सकता है - शुद्धता जांच के लिए जो प्रदर्शन को प्रभावित करेगा और इस प्रकार डिफ़ॉल्ट रूप से सबसे अच्छा अक्षम है। हालाँकि मेरा अनुभव यह है कि अधिकांश दावे हमेशा-हमेशा होने चाहिए।
मैं कहता हूं कि परीक्षण मामलों में JUnit मुखर का उपयोग करें, और कोड में जावा के मुखर का उपयोग करें। दूसरे शब्दों में, वास्तविक कोड में JUnit निर्भरता कभी नहीं होगी, जैसा कि स्पष्ट है, और यदि यह एक परीक्षण है, तो उसे इसके JUnit रूपांतरों का उपयोग करना चाहिए, मुखर कभी नहीं।
मैं कहूंगा कि यदि आप JUnit का उपयोग कर रहे हैं तो आपको JUnit के दावे का उपयोग करना चाहिए। assertTrue()
मूल रूप से एक ही है assert
, अन्यथा क्यों JUnit का उपयोग करें?
Assert
अधिक बॉयलरप्लेट की आवश्यकता होगी। assert
JUnit के बिना आपको एक पूरी रूपरेखा लिखने की आवश्यकता होगी।