c# – 如何使用Moq模拟ILogger / ILoggerService
发布时间:2020-12-15 08:47:41 所属栏目:百科 来源:网络整理
导读:我正在为View Model类编写一些单元测试.该类的构造函数注入ILoggerService.该接口定义了一个返回ILogger的方法GetLog.类似于下面的东西,它代表一个实现ILoggable的类: – protected ViewModelBase(ILoggerService loggerService) { Logger = loggerService.
我正在为View Model类编写一些单元测试.该类的构造函数注入ILoggerService.该接口定义了一个返回ILogger的方法GetLog.类似于下面的东西,它代表一个实现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?目前,我的Unit测试会抛出一个NullReferenceExeception. 我正在用Moq做我的嘲笑. 我想我需要做一些事情 var loggerService = new Mock<ILoggerService>(); loggerService.Setup(svc => svc.GetLog(??)) 但是,如果不让我的测试类实现ILoggable,我无法看到. 提前致谢. 解决方法
我不确定GetLog方法参数的类型是什么,但我认为它类似于对象,因此记录器服务可以确定请求记录器的类型.您可以使用它来模拟正在设置的方法中的参数,如下所示.
var logger = new Mock<ILogger>(); var loggerService = new Mock<ILoggerService>(); loggerService.Setup(c => c.GetLog(It.IsAny<object>()) .Returns(logger.Object); 然后将logger.Object传递给任何需要ILoggerService的方法或类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |