2012-03-20 98 views
6

我正在为我的View Model类编写一些单元测试。这个类的构造函数注入了一个ILoggerService。这个接口定义了1个返回一个ILogger的方法GetLog。类似下面,其中表示实现ILoggable类: -如何使用Moq模拟ILogger/ILoggerService

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以便返回有效的记录器?目前我的单元测试抛出一个NullReferenceExeception。

我正在使用Moq做我的嘲弄。

我想象我需要做的沿

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

线的东西,但我看不出没有让我的测试类实现ILoggable。

在此先感谢。

回答

6

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

+0

辉煌。这很有用。非常感谢 – user630190 2012-03-20 12:55:58

+0

作为参考,我使用类似:'var loggerMoq = Mock.Of >();' – Nordes 2018-02-08 03:58:40

相关问题