c# – 如何使用Moq模拟ILoggerILoggerService

c# – 如何使用Moq模拟ILoggerILoggerService,第1张

概述我正在为View Model类编写一些单元测试.该类的构造函数注入ILoggerService.该接口定义了一个返回ILogger的方法GetLog.类似于下面的东西,它代表一个实现ILoggable的类: – protected ViewModelBase(ILoggerService loggerService) { Logger = loggerService.Get 我正在为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的方法或类型.

总结

以上是内存溢出为你收集整理的c# – 如何使用Moq模拟ILogger / ILoggerService全部内容,希望文章能够帮你解决c# – 如何使用Moq模拟ILogger / ILoggerService所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1252307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存