2011-02-07 10 views
6

क्या राइनो मोक्स या इसी तरह का उपयोग करते हुए एनएलओजी लॉग विधियों का नकल करना आसान/आसान है?क्या एनएलओजी लॉग विधियों का नकल करना संभव है?

+0

http://slf.codeplex.com/ – Jon

+1

पर देखने का प्रयास करें विस्तृत पोस्ट [निर्भरता इंजेक्शन के साथ NLog का उपयोग करना] देखें (http: //blog.tonysneed .com/2011/10/09/का उपयोग कर-nlog-साथ-निर्भरता इंजेक्शन /)। पोस्ट डी इंजेक्शन को डीआई उदाहरण के रूप में उपयोग करता है। –

उत्तर

2

आप केवल आभासी तरीकों का नकल कर सकते हैं। लेकिन अगर आप लॉगिंग के लिए कुछ इंटरफ़ेस बनाते हैं और फिर एनएलओजी का उपयोग करके इसे कार्यान्वित करते हैं तो आप निर्भरता इंजेक्शन का उपयोग कर सकते हैं और आपके परीक्षणों में मैक इंटरफ़ेस का उपयोग यह देखने के लिए किया जा सकता है कि परीक्षण के तहत सिस्टम (एसयूटी) लॉगिंग कर रहा है या नहीं, जिसे आप लॉग इन करने की उम्मीद करते हैं।

 
public class SUT 
{ 
    private readonly ILogger logger; 
    SUT(ILogger logger) { this.logger = logger;} 
    MethodUnderTest() { 
    // ... 
    logger.LogSomething(); 
    // ... 
    } 
} 

// and in tests 
var mockLogger = new MockLogger(); 
var sut = new SUT(mockLogger); 
sut.MethodUnderTest(); 
Assert.That("Expected log message", Is.Equal.To(mockLogger.LastLoggedMessage)); 
1

सरल उत्तर, 'नहीं' है। कोड को देखते हुए, निर्भरता-इंजेक्शन समर्थित नहीं है, जो कि एक निरीक्षण की तरह लगता है, विशेष रूप से क्योंकि इसे कार्यान्वित करना मुश्किल नहीं लगता है (पहली नज़र में)।

कॉम इंटरऑप ऑब्जेक्ट्स और कुछ अन्य चीजों का समर्थन करने के लिए प्रोजेक्ट में एकमात्र इंटरफेस हैं। मुख्य Logger कंक्रीट क्लास न तो एक इंटरफेस लागू करता है, न ही आभासी तरीकों को प्रदान करता है।

आप या तो एक इंटरफ़ेस प्रदान कर सकते हैं, या निर्भरता का नकल करने के लिए मोल्स/टाइपमैक/अन्य अलगाव फ्रेमवर्क का उपयोग कर सकते हैं।

9

Nuget का उपयोग करना: install-package NLog.Interface

फिर

: ILogger = new LoggerAdapter([logger-from-NLog]);

+0

सरल, लेकिन प्रभावी। गीथूब प्रोजेक्ट यहां है यदि कोई यह देखना चाहता है कि यह क्या करता है: https://github.com/uhaciogullari/NLog.Interface – killthrush

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