How can I test function with prism event aggregator subscripe inside?

38 Views Asked by At

I use Xunit and Moq to test my application. I am new at this topic...

Is it possible to test the method DBConnector(...) ?

And if yes, how?

I try it with mock... but the following line causes problems: Exception: System.NullReferenceException

eventAggregator.GetEvent<UpdateSomeStateEvent>().Subscribe((x) => UpdateSomeState(x));

Update: Added the code for mock setup

System.NullReferenceException presumably fixed by this.

But now i get this exception:

Unsupported expression: p => p.Subscribe (It.IsAny<Action>()). Non-overridable members (here: PubSubEvent.Subscribe) may not be used in setup / verification expression.

My code to be tested

public DBConnector(MyContext context , ILogger loggerFacade , IEventAggregator eventAggregator)
    {
      mContext = context;
      mLoggerFacade = loggerFacade;
      mLoggerFacade.Log(LogLevel.Debug , "Some text");

      eventAggregator.GetEvent<UpdateSomeStateEvent>().Subscribe((x) => UpdateSomeState(x));
    }

    private void UpdateSomeState(SomeState x)
    {
      SomeState = x;
    }
public class DBConnectorClassData : IEnumerable<object[]>
  {
    public IEnumerator<object[]> GetEnumerator()
    {
      var mLogger = new Mock<ILogger>();
      ILogger logger = mLogger.Object;

      var mEA = new Mock<IEventAggregator>();

      Mock<UpdateSomeStateEvent> mEvent = new Mock<UpdateSomeStateEvent>();
      
      Action<SomeState> callback = null;

      mEA.Setup(e => e.GetEvent<UpdateSomeStateEvent()).Returns(mEvent.Object);

               
      IEventAggregator eventAggregator = mEA.Object;

      var ctxt = new MyContext();
      
      yield return new object[]
        {
             new DBConnector(ctxt, logger, eventAggregator)
        };
    }
    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
  
  }
0

There are 0 best solutions below