3
私はComposite Application Libraryのイベントアグリゲータを使用しています。私の単体テストで使用するIEventAggregatorインターフェイス用のモックを作成したいと思います。MoqでCAL EventAggregatorを嘲笑
私は、このタスクのためにMoqを使用して計画していて、例えば、テストは、これまでに次のようになります。
var mockEventAggregator = new Mock<IEventAggregator>();
var mockImportantEvent = new Mock<ImportantEvent>();
mockEventAggregator.Setup(e => e.GetEvent<SomeOtherEvent>()).Returns(new Mock<SomeOtherEvent>().Object);
mockEventAggregator.Setup(e => e.GetEvent<SomeThirdEvent>()).Returns(new Mock<SomeThirdEvent>().Object);
// ...
mockEventAggregator.Setup(e => e.GetEvent<ImportantEvent>()).Returns(mockImportantEvent.Object);
mockImportantEvent.Setup(e => e.Publish(It.IsAny<ImportantEventArgs>()));
// ...Actual test...
mockImportantEvent.VerifyAll();
これは正常に動作しますが、それにいくつかの巧妙な方法がある場合、私は、知っているたいと思います私のコードが遭遇する可能性のあるすべてのイベントタイプ(SomeOtherEvent、SomeThirdEvent、...)に空のモックを定義する必要はありませんか?私はもちろん、[TestInitialize]メソッドでこのようにすべてのイベントを定義することができますが、もっと巧妙な方法があるかどうかを知りたいのですが?
var mockEventAggregator = new Mock<IEventAggregator>{ DefaultValue = DefaultValue.Mock };
がmockEventAggregatorリターンは、すべてのネストされたオブジェクトのためのモックようになります。:-)