我正在为View Model类编写一些单元测试。该类的构造函数注入ILoggerService。该接口定义了一个返回ILogger的方法GetLog。下面的内容 this 表示实现ILoggable的类: -
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?目前我的Unit测试会抛出一个NullReferenceExeception。
我正在使用Moq做我的嘲笑。
我想我需要按照
的方式做点什么var loggerService = new Mock<ILoggerService>();
loggerService.Setup(svc => svc.GetLog(??))
但是如果不让我的测试类实现ILoggable,我就无法看到。
提前致谢。
答案 0 :(得分:9)
我不确定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
的任何方法或类型。