2012-03-20 11 views
6

का उपयोग करके इलोगर/ILoggerService का नकल कैसे करें मैं अपने व्यू मॉडल क्लास के लिए कुछ यूनिट परीक्षण लिख रहा हूं। इस वर्ग के निर्माता को आईएलओगर सेवा के साथ इंजेक्शन दिया गया है। यह इंटरफ़ेस 1 विधि GetLog को परिभाषित करता है जो एक ILogger देता है।मोक

private void CreateNewOrder(INewOrderViewModel newOrderViewModel) 
    { 
     Logger.Log("Sending Create New Order Message", LogCategory.Info); 
     var createNewOrderMessage = new OrderMessage(newOrderViewModel); 
     _eventAggregator.GetEvent<CreateOrderEvent>().Publish(createNewOrderMessage); 
    } 

मैं कैसे जाना होगा:

protected ViewModelBase(ILoggerService loggerService) 
    { 
     Logger = loggerService.GetLog(this); 
    } 

मैं अपने CreateNewOrder विधि है कि नीचे की तरह दिखता है परीक्षण इकाई के लिए कोशिश कर रहा हूँ: - जैसे नीचे जहां इस एक वर्ग है कि ILoggable लागू करता है का प्रतिनिधित्व करता है कुछ ILoggerService का मज़ाक उड़ाते हुए ताकि वैध लॉगर वापस कर दिया जा सके? फिलहाल मेरा यूनिट परीक्षण एक NullReferenceExeception फेंकता है।

मैं अपने मॉकिंग करने के लिए मोक का उपयोग कर रहा हूं।

मैं कल्पना कर रहा हूँ मैं

var loggerService = new Mock<ILoggerService>(); 
     loggerService.Setup(svc => svc.GetLog(??)) 

की तर्ज पर कुछ करने की ज़रूरत है लेकिन मैं कैसे अपने परीक्षण वर्ग को लागू ILoggable किए बिना नहीं देख सकता।

अग्रिम धन्यवाद।

उत्तर

6

मुझे यकीन नहीं है कि GetLog विधि पैरामीटर का प्रकार क्या है, लेकिन मुझे लगता है कि यह object जैसा कुछ है, इसलिए लॉगर सेवा लॉगर का अनुरोध करने वाले प्रकार को निर्धारित कर सकती है। आप नीचे देखे गए तरीके में नकली पैरामीटर के लिए It का उपयोग कर सकते हैं।

var logger = new Mock<ILogger>(); 

var loggerService = new Mock<ILoggerService>(); 
loggerService.Setup(c => c.GetLog(It.IsAny<object>()) 
    .Returns(logger.Object); 

फिर जो कुछ भी विधि या प्रकार एक ILoggerService जरूरत है logger.Object गुजरती हैं।

+0

शानदार। उसने एक इलाज किया। बहुत बहुत धन्यवाद – user630190

+0

संदर्भ के लिए, मैं कुछ ऐसा उपयोग करता हूं: 'var loggerMoq = Mock.Of >();' – Nordes

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