9

View Model クラスの単体テストを書いています。このクラスのコンストラクターには、ILoggerService が挿入されます。このインターフェイスは、ILogger を返す 1 つのメソッド 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);
    }

有効な Logger が返されるように ILoggerService をモックするにはどうすればよいですか? 現時点では、単体テストで 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 に答える