2012-03-20 12 views
6

私はView Modelクラスの単体テストを書いています。このクラスのコンストラクタには、ILoggerServiceが挿入されます。このインタフェースは、ILoggerを返す1つのメソッドGetLogを定義します。 このがILoggableを実装するクラスを表し、以下のような何か: -Moogを使って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); 
    } 

を有効なLoggerが返されるようにILoggerServiceをMockingしていますか?現時点では、ユニットテストでNullReferenceExeceptionがスローされます。

私はモックをするためにMoqを使用しています。

私は

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

の線に沿って何かをする必要がある。しかし、私は私のテストクラスがILoggableを実装することなく、どのように見ることができません想像しています。

ありがとうございます。

答えて

6

のタイプのパラメータがわかりませんが、これはobjectのようなものなので、ロガーサービスはロガーを要求するタイプを判別できます。 Itを使用して、以下に示すように、設定しているメソッドのパラメータをモックすることができます。

var logger = new Mock<ILogger>(); 

var loggerService = new Mock<ILoggerService>(); 
loggerService.Setup(c => c.GetLog(It.IsAny<object>()) 
    .Returns(logger.Object); 

そしてILoggerServiceを必要とするどのような方法又はタイプにlogger.Objectを渡します。

+0

ブリリアント。それは治療に効果があった。ありがとうございました – user630190

+0

参考までに、私は次のようなものを使います: 'var loggerMoq = Mock.Of >();' – Nordes

関連する問題