Дразнить CAL EventAggregator с Moq - PullRequest
3 голосов
/ 12 марта 2009

Я использую агрегатор событий 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 Ответ

1 голос
/ 18 марта 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...