2011-01-10 15 views
20

मैं slf4j का उपयोग कर रहा हूं और मैं यह सुनिश्चित करने के लिए इकाई को अपने कोड का परीक्षण करना चाहता हूं कि कुछ शर्तों के तहत चेतावनी/त्रुटि लॉग संदेश उत्पन्न हो जाएं। मैं बल्कि ये सख्त यूनिट परीक्षण होगा, इसलिए लॉग संदेश उत्पन्न होने के परीक्षण के लिए मैं फ़ाइल से लॉगिंग कॉन्फ़िगरेशन को खींचना नहीं चाहता हूं। मैं जिस मॉकिंग फ्रेमवर्क का उपयोग कर रहा हूं वह मॉकिटो है।यूनिट-टेस्ट एसएलएफ 4 जे लॉग संदेशों का सबसे अच्छा तरीका क्या है?

+0

चूंकि एसएलएफ 4 जे अन्य लॉगिंग कार्यान्वयन के लिए सिर्फ "मुखौटा" है, इसलिए आप इकाई को स्वयं ही परीक्षण नहीं कर सकते हैं, आपको उस क्रियान्वयन को भी निर्दिष्ट करना होगा जिसका आप उपयोग कर रहे हैं। – darioo

+1

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

+0

एक तरफ, आम तौर पर उत्कृष्ट "बढ़ते ऑब्जेक्ट ओरिएंटेड सॉफ्टवेयर" पुस्तक में लॉगिंग के यूनिट परीक्षण पर एक अध्याय है। यह पूरी तरह से भरोसेमंद नहीं है, लेकिन यह निश्चित रूप से अच्छी तरह से विचार किया गया है, और पढ़ने के लायक है (http://www.amazon.co.uk/Growing-Object-Oriented-Software-Guided-Signature/dp/0321503627/ref=sr_1_1 ? यानी = यूटीएफ 8 और एस = किताबें और qid = 1294688741 और sr = 8-1) – skaffman

उत्तर

9

मुझे लगता है कि आप एक कस्टम एपेंडर के साथ अपनी समस्या का समाधान कर सकते हैं। एक परीक्षण एपेंडर बनाएं जो org.apache.log4j.Appender लागू करता है, और अपने एपेंडर को log4j.properties पर सेट करें और परीक्षण मामलों को निष्पादित करते समय लोड करें।

तो तुम वापस कि appender से परीक्षण दोहन करने के लिए कॉल आप लॉग इन संदेशों

+3

यदि आप कुछ कोड नमूने पेश कर सकते हैं तो इसकी बहुत सराहना की जाएगी। – kenshinji

+0

@kenshinji एक उदाहरण यहां दिया गया है: https://stackoverflow.com/a/1828268/2521769 –

1

एसएलएफ 4 जे का मज़ाक उड़ाए जाने के बजाय आप को अपने स्वयं के तरीकों के परीक्षण के लिए की महत्वपूर्ण लॉगिंग कॉल कर सकते हैं, जिन्हें आप अधिक आसानी से नकल कर सकते हैं।

यदि आप वास्तव में SLF4J का नकल करना चाहते हैं, तो मैं शर्त लगाता हूं कि आप इसके लिए अपना स्वयं का प्रदाता बना सकते हैं जो आपको आपकी सेवा ऑब्जेक्ट्स में इंजेक्शन देने के बजाय एसएलएफ 4 जे पक्ष से नकली लॉगर की आपूर्ति करने की अनुमति देगा।

0

@Zsolt की तरह जांच कर सकते हैं, तो आप log4j Appender नकली और Logger पर सेट कर सकते हैं, तो Appender.doAppend() के लिए कॉल की पुष्टि करें। यह आपको वास्तविक कोड को संशोधित किए बिना परीक्षण करने की अनुमति देता है।

10

एक विशिष्ट कार्यान्वयन (जैसे log4j) पर भरोसा किए बिना slf4j का परीक्षण करने के लिए, आप this SLF4J FAQ में वर्णित अनुसार अपना स्वयं का slf4j लॉगिंग कार्यान्वयन प्रदान कर सकते हैं। आपका कार्यान्वयन लॉग किए गए संदेशों को रिकॉर्ड कर सकता है और उसके बाद सत्यापन के लिए आपके यूनिट परीक्षणों से पूछताछ की जा सकती है।

slf4j-test पैकेज बिल्कुल ठीक है। यह एक इन-मेमोरी slf4j लॉगिंग कार्यान्वयन है जो लॉग संदेशों को पुनर्प्राप्त करने के तरीकों को प्रदान करता है।

5

SLF4J का एक बेहतर परीक्षण कार्यान्वयन कि समवर्ती परीक्षा निष्पादन के साथ एक वातावरण में वास्तव में अच्छी तरह काम करता है https://github.com/portingle/slf4jtesting

मैं slf4j लॉग परीक्षण पर कुछ चर्चा और मौजूदा परीक्षण की सीमाओं पर में chimed गए दृष्टिकोण जब यह बात आती है समवर्ती परीक्षण निष्पादन के लिए।

मैंने अपने शब्दों को कोड में डालने का फैसला किया और वह गिट रेपो परिणाम है।

+0

उम्मीद है कि जल्द ही तीसरा उत्तर किसी ऐसे व्यक्ति से दिखाई देगा जिसमें SLF4j का बेहतर परीक्षण कार्यान्वयन हो ....;) – Adam

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