3

複合アプリケーションライブラリのイベントアグリゲーターを使用しており、単体テストで使用するために、 IEventAggregatorインターフェイスのモックを作成したいと思います。

このタスクに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]メソッドでこのように定義することもできますが、もっと賢い方法があるかどうか知りたいですか?:-)

4

1 に答える 1

1

私はこれに対する解決策を見つけました:

var mockEventAggregator = new Mock<IEventAggregator>{ DefaultValue = DefaultValue.Mock };

mockEventAggregator がネストされたすべてのオブジェクトのモックを返すようにします。

于 2009-03-18T09:04:42.767 に答える