使用Moq模拟CAL EventAggregator

时间:2009-03-12 14:38:12

标签: .net unit-testing mocking moq

我正在使用Composite Application Library的事件聚合器,并希望为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]方法中以这种方式定义所有事件,但我想知道是否有更聪明的方法? : - )

1 个答案:

答案 0 :(得分:1)

我找到了这个解决方案:

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

将使mockEventAggregator返回所有嵌套对象的模拟。