How to Mock ILogger / ILoggerService using Moq

I am writing some unit tests for the View Model class. The constructor of this class is introduced by ILoggerService. This interface defines 1 GetLog method that returns an ILogger. Something like below, where this one represents a class that implements ILoggable: -

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

I am trying to use unit test my CreateNewOrder method, which looks like this:

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

What should I do in the Mocking ILoggerService to return a valid Logger? At the moment, my unit test throws a NullReferenceExeception.

I use Moq to do bullying.

It seems to me that I need to do something line by line

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

But I do not see how without executing my ILoggable test class.

Thanks in advance.

+7
source share
1 answer

I'm not sure if the type has a GetLog method GetLog , but I am assuming something like object so that the log service can determine the type of logger request. You can use It to define the parameters in the method you are setting, as shown below.

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

Then pass logger.Object any method or type.

+9
source

Source: https://habr.com/ru/post/911186/


All Articles