2012-03-20 6 views
6

Я пишу некоторые модульные тесты для моего класса Model Model. Конструктору этого класса вводится ILoggerService. Этот интерфейс определяет 1 метод GetLog, который возвращает ILogger. Что-то, как показано ниже, где это представляет собой класс, который реализует ILoggable: -Как скомпоновать ILogger/ILoggerService с использованием Moq

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

Я пытаюсь блок проверить мой метод CreateNewOrder, который выглядит, как показано ниже:

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

Как я пошел бы о Mocking ILoggerService, чтобы вернуть действительный Logger? В настоящий момент мой модульный тест выдает NullReferenceExeception.

Я использую Moq, чтобы делать издевательство.

Я воображал, что нужно сделать что-то вдоль линий

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); 

Затем пройти logger.Object к любому методу или типа нуждается в ILoggerService.

+0

Блестящий. Это сработало. Большое спасибо – user630190

+0

Для справки я использую что-то вроде: 'var loggerMoq = Mock.Of >();' – Nordes

Смежные вопросы