2012-03-20 14 views
6

Estoy escribiendo algunas pruebas de unidad para mi clase de modelo de vista. El constructor de esta clase se inyecta con un ILoggerService. Esta interfaz define 1 método GetLog que devuelve un ILogger. Algo así como por debajo de donde este representa una clase que implementa ILoggable: -Cómo simular ILogger/ILoggerService usando Moq

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

estoy tratando de probar mi método de unidad de CreateNewOrder que se parece a continuación:

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

¿Cómo iría sobre Mocking del ILoggerService para que se devuelva un Logger válido Por el momento, mi prueba de unidad arroja una NullReferenceExeception.

Estoy usando Moq para hacer mi burla.

estoy imaginando que tiene que hacer algo en la línea de

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

pero no puedo ver cómo sin hacer mi clase de elemento de ensayo ILoggable.

Gracias de antemano.

Respuesta

6

No estoy seguro de qué tipo es el parámetro de método GetLog, pero supongo que es algo así como object por lo que el servicio de registrador puede determinar el tipo que solicita un registrador. Puede usar It para simular parámetros en un método que está configurando, como se ve a continuación.

var logger = new Mock<ILogger>(); 

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

A continuación, pasar logger.Object a cualquier método o tipo necesita una ILoggerService.

+0

Brillante. Eso funcionó un placer. Muchas gracias – user630190

+0

Como referencia, uso algo como: 'var loggerMoq = Mock.Of >();' – Nordes

Cuestiones relacionadas