2012-03-20 14 views
6

Sto scrivendo alcuni test unitari per la mia classe View Model. Il costruttore di questa classe viene iniettato con un ILoggerService. Questa interfaccia definisce 1 metodo GetLog che restituisce un ILogger. Qualcosa di simile sotto dove questo rappresenta una classe che implementa ILoggable: -Come simulare ILogger/ILoggerService usando Moq

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

sto cercando di unità di prova il mio metodo CreateNewOrder che assomiglia di seguito:

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

Come potrei fare su Mocking di ILoggerService in modo che venga restituito un Logger valido? Al momento il mio test unitario lancia una NullReferenceExeception.

Sto usando Moq per fare il mio beffardo.

sto immaginando ho bisogno di fare qualcosa sulla falsariga di

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

ma non riesco a vedere come, senza fare la mia classe di test implementare ILoggable.

Grazie in anticipo.

risposta

6

Non sono sicuro del tipo di parametro del metodo GetLog, ma presumo che sia qualcosa come object in modo che il servizio di registrazione possa determinare il tipo che richiede un registratore. È possibile utilizzare It per simulare i parametri in un metodo che si sta configurando, come illustrato di seguito.

var logger = new Mock<ILogger>(); 

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

Poi passare logger.Object a qualsiasi metodo o tipo necessita di un ILoggerService.

+0

Brillante. Ha funzionato a meraviglia Grazie mille – user630190

+0

Per riferimento, io uso qualcosa come: 'var loggerMoq = Mock.Of >();' – Nordes

Problemi correlati