यह कोडक्या हमें यूनिट परीक्षण लॉगिंग करना चाहिए?
public class A {
private static final Log LOG = LogFactory.getLog(A.class);
और उपयोग
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throw e;
}
में प्रवेश कार्यक्षमता को देखने के लिए हमेशा की तरह है, लेकिन मैं इस तरह के कोड के लिए भी एक इकाई परीक्षण कभी नहीं देखा था।
बेशक मैं परीक्षण फेंकने अपवाद और अपवाद प्रकार का परीक्षण करता हूं, लेकिन क्या मुझे लॉगिंग जानकारी जांचने के लिए परीक्षण लिखना चाहिए? मुझे लगता है कि लॉगिंग सिस्टम व्यवहार का एक और हिस्सा है, इसलिए इसे परीक्षण में कवर करने के लिए तर्कसंगत रूप से छोड़ दिया जाता है।
मान लीजिए कि मुझे इसे कवर करना चाहिए, इसका मतलब है कि मुझे अपना मूल कोड मॉक लॉग इंजेक्ट करने के लिए बदलना चाहिए और जांचें कि "त्रुटि" विधि अपेक्षित संदेश के साथ लागू की गई थी। लेकिन अगर मेरी मूल कक्षा सेवा है और वसंत द्वारा इसे तुरंत चालू किया जाए तो क्या करना चाहिए, क्या मुझे कुछ लॉगर और साथ ही अन्य निर्भरताओं को इंजेक्ट करना चाहिए?
यह वही दृष्टिकोण है जिसका मैंने अपने प्रश्न में उल्लेख किया है। लेकिन मेरे लिए यह अभी भी स्पष्ट नहीं है कि बसंत सेवाओं के मामले में क्या करना है क्योंकि आमतौर पर प्रत्येक वर्ग के लिए बनाया गया LOG, इसलिए यह वर्ग विशिष्ट है और मैं इसे सिंगलटन के रूप में नहीं बना सकता। –
यदि आपके पास लॉग ऑब्जेक्ट को तुरंत चालू करने वाले कोड पर कोई नियंत्रण नहीं है, तो व्यवहार का परीक्षण करना मुश्किल है, क्योंकि आप नकली लॉग का उपयोग नहीं कर सकते हैं। आप इसे वास्तविक लॉग ऑब्जेक्ट से लॉग इन कर सकते हैं, फिर जांचें कि एक संदेश लॉग किया गया था। हालांकि, स्वचालित करना मुश्किल है! –
नहीं, मैं आपसे सहमत हूं कि लॉगिंग कोड का परीक्षण किया जाना चाहिए। इसका मतलब है कि हमारे पास LOG के लिए सेटटर होना चाहिए, इसलिए परीक्षणों में नकली लॉग पास करना संभव होगा, लेकिन वसंत सेवाओं के मामले में क्या करना है। मैं 2 संभावित तरीकों के बारे में सोच रहा हूं: 1) एक सेटटर है लेकिन केवल परीक्षणों में कॉल करें (वसंत के माध्यम से लॉगजर इंजेक्शन के बाद से इस तरह की दृश्यता को सीमित करना मुश्किल हो सकता है), लेकिन इस मामले में मुश्किल है उचित लॉगर तुरंत चालू करें। –