2009-03-12 4 views
3

Я использую агрегатор событий Composite Application Library и хотел бы создать макет для интерфейса IEventAggregator, который будет использоваться в моем модульном тесте.Откалывание CAL EventAggregator с Moq

Я планирую использовать 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

Я нашел решение для этого:

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

сделает возвращение mockEventAggregator издевается для всех вложенных объектов.

Смежные вопросы