0

I am writing UnitTest for my ViewModels. In my ViewModel I have:

private IEventAggregator _eventAggregator;

public MyViewModel( IEventAggregator eventAggregator  ) {
  _eventAggregator = eventAggregator;
  _eventAggregator.GetEvent<ResponseParameters>( ).Subscribe( OnResponseParametersSave );
}

private void OnResponseParametersSave (ResponseParameters item ){
  var x = item
}

Now in my UnitTest I do the Following:

private IUnityContainer _unityContainer;
private IEventAggregator _eventAggregator;

[TestInitialize]
public async void TestInitialize( ) {
     _unityContainer = new UnityContainer( );
     _unityContainer.RegisterType<IEventAggregator, EventAggregator>( );
     _eventAggregator = _unityContainer.Resolve<EventAggregator>( );

     _vm = _unityContainer.Resolve<MyViewModel>( );
     await _vm.Load( );
}

[TestMethod]
public void AddingItemDataObjectsShouldThenBeLoaded( ) {
  var _item = new MyObject{
    Description = "ArticleOne",
    Id = 2,
    Comment = "Testing event and adding of item to list",
   };
   _eventAggregator.Publish( new ResponseParameters ( ) { item = _item } );
   Assert.IsNotNull(_vm.Data, "The Data object is still null after adding an item" );

}

I have put a breakpoint on the Method OnResponseParametersSave() but it is not triggering when I debug the test.

Does anyone have an Idea what I am doing wrong oe how to publish an event in a UnitTest

user1702369
  • 1,089
  • 2
  • 13
  • 31
  • EventAggregator.Publish just publishes the event and returns in a fire-and-forget fashion. You should provide your own implementation of the IEventAggregator interface in your unit tests: http://stackoverflow.com/questions/3694195/moq-event-aggregator-is-it-possible. – mm8 Feb 28 '17 at 17:07

1 Answers1

0

Guess you are using PRISM (IEventAggregator and Unity).

I used PRISM some years ago and had to write

_eventAggregator.GetEvent<ResponseParameters>().Publish( new ResponseParameters ( ) { item = _item } );

to fire and event. But I guess it was just an older syntax.

Have you tried creating an instance of your ViewModel without Unity?

_eventAggregator = new EventAggregator();
_vm = new MyViewModel>(_eventAggreator);

Just to be shure Unity isn't making any trouble.

Mighty Badaboom
  • 6,067
  • 5
  • 34
  • 51