9

我正在为我的 View Model 类编写一些单元测试。此类的构造函数注入了 ILoggerService。该接口定义了 1 个返回 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?目前我的单元测试抛出了 NullReferenceException。

我正在使用 Moq 来模拟。

我在想象我需要做一些事情

var loggerService = new Mock<ILoggerService>();
        loggerService.Setup(svc => svc.GetLog(??))

但是如果不让我的测试类实现 ILoggable,我看不到如何。

提前致谢。

4

1 回答 1

11

我不确定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.

于 2012-03-20T11:09:40.433 回答