如何使用Moq模拟ILogger/ILoggerService
本文关键字:ILoggerService ILogger 模拟 何使用 Moq | 更新日期: 2023-09-27 18:28:17
我正在为视图模型类编写一些单元测试。此类的构造函数注入了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);
}
我该如何模拟ILoggerService以便返回有效的Logger?目前,我的单元测试抛出了一个NullReferenceExeception。
我在用Moq做我的嘲讽。
我想我需要做一些类似的事情
var loggerService = new Mock<ILoggerService>();
loggerService.Setup(svc => svc.GetLog(??))
但如果不让我的测试类实现ILoggable,我就看不出该怎么办。
提前谢谢。
我不确定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
的方法或类型。