Вы не публиковали свои тесты, поэтому мне неясно, что вы пытаетесь проверить, но, скорее всего, вы пытаетесь проверить одну из следующих вещей:
- Что кодВы тестируете подписчиков вообще
- То, что тестируемый код реагирует на события соответствующим образом
В любом случае, вы захотите макетировать EventAggregator ,Поскольку событие - это не то, что вы хотите протестировать, а код, который его использует, вы хотите предоставить ложную альтернативу, которая делает то, что вы хотите, чтобы она делала.Я постараюсь привести хороший пример.Я использую Moq, но вы можете выбрать любую понравившуюся инфраструктуру.
В этом тесте я просто утверждаю, что Subscribe был вызван в конструкторе, но ваш тест может быть более сложным, если вы хотите проверить классреакция на возбужденное событие.Тест показывает CompositePresentationEvent<int>
.
//Arrange
Mock<MyEvent> mockEvent = new Mock<MyEvent>();
Mock<IEventAggregator> mockAggregator = new Mock<IEventAggregator>();
mockEvent.Setup
(
evnt => evnt.Subscribe(It.IsAny<Action<int>>())
);
mockAggregator.Setup
(
agg => agg.GetEvent<MyEvent>()
.Returns(mockEvent.Object);
);
//Act
MyClassIWantToTest target = new MyClassIWantToTest(mockAggregator.Object);
//Assert
mockEvent.VerifyAll();
Это основы.Основное правило заключается в том, что если вы проверяете использование системного ресурса, который трудно предоставить, изолируйте его от теста.
Редактировать: после прочтения вашего вопроса я вижу, что вы пытаетесь проверитьcallback.
В этом примере я проверяю, установлено ли для свойства "CurrentValueProperty" какое-либо значение, переданное в методе обратного вызова.Вот этот пример:
//Arrange
Mock<MyEvent> mockEvent = new Mock<MyEvent>();
Mock<IEventAggregator> mockAggregator = new Mock<IEventAggregator>();
Action<int> theEventCallback = null;
mockEvent.Setup
(
evnt => evnt.Subscribe(It.IsAny<Action<int>>())
)
.Callback<Action<int>>
(
cb => theEventCallback = cb
);
mockAggregator.Setup
(
agg => agg.GetEvent<MyEvent>()
)
.Returns(mockEvent.Object);
//Act
MyClassIWantToTest target = new MyClassIWantToTest(mockAggregator.Object);
//we expect this to be populated by the callback specified in our mock setup
//that will be triggered when Subscribe is called in
//MyClassIWantToTest's constructor
theEventCallback(27);
//Assert
Assert.AreEqual(target.CurrentValueProperty, 27);
Вот и все.