c# – 如何使用Moq模拟ILogger / ILoggerService

前端之家收集整理的这篇文章主要介绍了c# – 如何使用Moq模拟ILogger / ILoggerService前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为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的方法或类型.

原文链接:https://www.f2er.com/csharp/244890.html

猜你在找的C#相关文章