2012-03-20 10 views
6

Piszę niektóre testy jednostkowe dla mojej klasy View Model. Konstruktorowi tej klasy wstrzyknięto ILoggerService. Ten interfejs definiuje 1 metodę GetLog, która zwraca ILogger. Coś jak poniżej gdzie to reprezentuje klasę implementującą ILoggable: -Jak wyśmiać ILogger/ILoggerService za pomocą Moq

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

próbuję jednostki przetestować metodę CreateNewOrder który wygląda jak poniżej:

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

Jak pójdę o Kpiąc z ILoggerService, aby zwrócić prawidłowy Logger? W tej chwili mój test jednostki rzuca NullReferenceExeception.

Używam Moq do kpiny.

Wyobrażam sobie muszę zrobić coś wzdłuż linii

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

Ale nie widzę w jaki sposób bez dokonywania moja klasa próba wdrożenia ILoggable.

Z góry dziękuję.

Odpowiedz

6

Nie jestem pewien, jaki jest typ parametru metody GetLog, ale zakładam, że jest to coś w rodzaju object, aby usługa rejestratora mogła określić typ żądający rejestratora. Możesz użyć parametru It, aby pozorować parametry w metodzie, którą konfigurujesz, jak widać poniżej.

var logger = new Mock<ILogger>(); 

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

Następnie przechodzą logger.Object do dowolnej metody lub rodzaj potrzebuje ILoggerService.

+0

Genialny. To sprawiło przyjemność. Wielkie dzięki – user630190

+0

Dla odniesienia, używam czegoś takiego: 'var loggerMoq = Mock.Of >();' ' – Nordes